#1 Tue 09 December 2008 13:35
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Calcul Dsitance Point droite en WGS84
Bonjour tout le monde,
Dans le cadre d'un projet scolaire sur Open Street Map je suis amené a mettre en place une application se chargeant de mettre a jour (ou de creer dans le cas ou il n'y aurait pas d'information) les chemins présent sur la map de ma region.
Pour cela j'utilise le format d'exportation OpenStreetMap XML Data qui me permet d'analyser la liste des chemins (chaque chemin etant constitué de plusieurs noeuds)
Je procede a la verification (ou modification) des chemins de la facon suivante :
- j ai une nouvelle trace en ma possession
- pour chaque chemin recupérer lors de l exportation je verifie la distance entre un point de ma trace et un couple de noeud du chemin
le probleme c'est que je ne sais pas comment calculer cette distance justement... au depart j avais mis en place un petit programme faisant un simple calcul de la distance d'un point a une droite mais ca me semble pas approprié dans ce cas la (pas de prise en charge de l ellipsoïde WGS84 et donc mauvaise interpretation du resultat obtenu)
Je ne sais pas si j'ai été suffisamment clair dans la description...n'hesitez pas a poser des questions si c'est confus !
Merci pour votre aide
Hors ligne
#2 Tue 09 December 2008 13:51
Re: Calcul Dsitance Point droite en WGS84
A vue de nez, à l'affichage sur http://openstreetmap.org/ vous utilisez la projection de Mercator. Pourquoi ne pas faire les calculs dans cette projection ? Vous avez peur des déformations en Terre Adélie ?
Faire des calculs sur l'ellipsoïde, c'est compliqué, je comprendrais jamais ceux qui veulent faire ça avant d'essayer autre chose avant. C'est bien les défis, mais la trigo sphérique, c'est du masochisme
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#3 Tue 09 December 2008 15:58
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
Salut Jérôme C,
Je confirme OpenStreetMap utilise bien la projection de Mercator, cependant etant un vrai newbie en SIG, je m excuse d'avance si mes questions semblent evidente
Apres avoir fait une recherche sur cette projection (wikipedia pour pas le citer) je suis tombé sur deux equations permettant d'obtenir les coordonnées x et y a d'un point a partir de sa lat/lon ma question est la suivante :
si j applique cette convertion pour mes 3 points est ce que je peux par la suite utiliser une simple formule de calcul de distance d'un point a une droite ? ou est ce que j ai rien compri lol (dans ce cas comment s y prendre svp )
Hors ligne
#4 Tue 09 December 2008 17:15
Re: Calcul Dsitance Point droite en WGS84
Les questions ne sont pas évidentes, il y a juste desp roblèmes plus compliqués que d'autres. Le but d'une projection, c'est de pouvoir utiliser les points sur un plan. Donc une fois que tu as tes coordonnées X et Y, tu peux utiliser toutes les formules que tu as apprises au collèges, et après.
Comme je le disais, tu auras peut-être quelques écart par rapport à une formule exacte et surement compliquée lorsque tu seras en Terre Adélie et même un peu avant, mais je ne sais pas si c'est si important. (Si c'est juste pour trouver la distance minimale, il n'y a aucun soucis)
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#5 Tue 09 December 2008 17:35
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Bonjour,
Je suis d'accord avec Jérôme. Une fois qu'on travaille dans la projection, on calcule suivant la géométrie cartésienne en plan, et il n'y a juste qu'à appliquer l'éventuelle correction des distances, due à la projection, exactement de la même façon que lorsqu'on travaille en lambert (LT93 par exemple). Si les distances sont petites, cette correction est négligeable.
Cordialement
Hors ligne
#6 Wed 10 December 2008 00:02
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
Bonjour,
Je travaille avec des distances tres courtes donc apparement je pourrais me passer de la correction des distances
Cependant, etant plus doué en programmation qu'en mathematique je souhaiterais savoir si les formules de conversions suivantes sont correctes ?
Formules :
X = Lon
y = Ln( Tan(Lat) + 1/cos(Lat) )
et surtout dans quel unité sera le resultat obtenu apres mon calcul de distance? (je pense qu'il faut faire intervenir l echelle de la carte non ?)
Hors ligne
#7 Wed 10 December 2008 13:30
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Bonjour,
Les formules indiquées ont pour paramètres la lat et la lon. Je croyais que vous travaillez dans la projection Mercator, c'est à dire avec un X et un Y cartésien.
L'utilisation des coordonnées géographiques est possible, mais fait appel à la géométrie sphérique.
Je vais essayer de détailler non propos. Votre chemin est caractérisé un segment de droite A-B. Ce trajet est-il le plus court chemin de A à B tel que le prendrait un avion (l'orthodromie) ou est-ce le segment de droite traçé avec une règle sur la plan entre les points A et B? (la loxodromie).
N'hésitez pas à me détailler les hypothèses, j'essayerai d'être plus précis. Je ne connais pas OpenStreeMap, et je ne pourrai vous répondre que sur le calcul lui-même.
Si cette opération doit être répétitive, ce qui semble être le cas, ça vaut le coup de mettre au point une petite formule.
Cordialement.
Hors ligne
#8 Wed 10 December 2008 13:36
Re: Calcul Dsitance Point droite en WGS84
Dans la partie exemple de Wikipédia, tu as l'utilisation de la formule avec les facteurs d'échelles. En mettant les facteurs d'échelles, tu as des données en mètres.
Les formules telles que tu les présentes donnent un X en degrés, et Y sans unité ! (Attention si tu dois programmer ça avec des fonctions trigo, tu dois souvent avoir un angle en radians et pas en degrés).
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#9 Wed 10 December 2008 17:13
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
wouw eh ben ca y est je suis perdu
en lisant la formule sur wikipedia ( je cite : Les équations suivantes déterminent les coordonnées x et y d'un point sur une carte de Mercator à partir de sa latitude φ et de sa longitude λ (avec λ0 au centre de la carte) )
je pensais justement que la formule me retournait x et y par rapport a une Lat / Lon passé en parametre
Je vais essayer de detailler la situation :
J'ai une map (apparement en projection Mercator)
Lorsque j exporte les données provenant de la region selectionnée, ces dernieres sont caracterisées de la facon suivante :
- une liste de chemin
- chaque chemin est composé d'une liste de noeud ayant pour parametres une latitude et une longitude
J'ai une trace (provenant de la region selectionnée) composé de la meme facon
- un chemin
- une liste de noeud qui compose se chemin
l'objectif c'est de prendre 2 noeuds de ma premiere source (les données provenant directement de la map) de former un segment, de prendre par exemple le 1e noeud de ma trace et de calculer la distance entre ce dernier et le segment formé
les distances sont assez courtes (quelques km pas plus)
ps : j ai trouvé ce petit bout de code pour faire la conversion
Code:
Private Function CalcTileXY(ByVal lat As Single, ByVal lon As Single, ByVal zoom As Long) As Point Dim xf As Single = (lon + 180) / 360 * 2 ^ zoom Dim yf As Single = (1 - Math.Log(Math.Tan(lat * Math.PI / 180) + 1 / Math.Cos(lat * Math.PI / 180)) / Math.PI) / 2 * 2 ^ zoom CalcTileXY.X = CLng(Math.Floor(xf)) CalcTileXY.Y = CLng(Math.Floor(yf)) End Function
Dernière modification par Dada97.2 (Wed 10 December 2008 17:21)
Hors ligne
#10 Wed 10 December 2008 17:41
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Si les nœuds, cad sommets de la ligne brisée sont en lat/lon, le fait que la carte soit en projection Mercator ne change rien.
Autrement dit, je résume. Le problème consiste à calculer la distance la plus courte entre un pont P et un segment AB. Les points P, A et B sont connus en coordonnées géographiques (lon/lat) et la longueur de A-B n'excède pas plus de quelques Km.
Si cette hypothèse est bonne, je veux bien établir la formule.
Cordialement.
Hors ligne
#11 Wed 10 December 2008 18:35
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
C'est tout a fait ca !
Je vous remercie pour l'attention que vous portez a mon probleme
Hors ligne
#12 Wed 10 December 2008 19:18
Re: Calcul Dsitance Point droite en WGS84
Oulaah, j'ai dit quelques bêtises. Excuse-moi de t'avoir perdu
Le truc, c'est que le facteur d'échelle a l'air compliqué car Wikipédia considère que la formule est pour des angles en degrés. Alors que la formule est évidemment pour des angles en radians.
Le code que tu as trouvé est tout à fait correct.
Maintenant tu as tes points converti en Mercator, tu peux donc utiliser toutes les formules de collège / lycée que tu connais ou que tu trouveras.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#13 Wed 17 December 2008 02:57
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
re
Juste quelques precisions : le zoom qui apparait dans ma fonction correspond au niveau de zoom de ma map je suppose ?
apparement d'apres le lien suivant : http://wiki.openstreetmap.org/index.php … _tilenames
j'obtiens tilex et tiley c'est donc a partir de ca que je fais mes calculs ?
l'interpretation le resultat obtenu dependra de l'echelle de ce zoom ?
Cordialement.
Dernière modification par Dada97.2 (Wed 17 December 2008 02:59)
Hors ligne
#14 Wed 17 December 2008 09:14
Re: Calcul Dsitance Point droite en WGS84
Tout à fait, en sachant que l'échelle en mètre en fonction du zoom est donnée par http://wiki.openstreetmap.org/wiki/FAQ# … the_map.3F
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#15 Wed 17 December 2008 14:00
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Bonjour,
Quelle joie de retrouver son forum préféré
Concernant le sujet en cours, je résume la question
Soit un réseau R composé de noeuds reliés par des segments. et des chemins C constitués de noeuds reliés par des segments. Ces deux ensembles sont connus en coordonnées géographiques Lon/lat.
Le problème est de calculer la distance de chaque noeud de C par rapport au segment le plus proche du réseau R.
Si telle est la question, comme prévu j'ai établi une formule de calcul de la distance en mètres d'un point à un segment.
Ja vais rédiger la méthode, et je mettrai un lien très vite.
Pour mémoire, l'utilisation d'une projection conduit à des écarts non négligeables
Cordialement
Hors ligne
#16 Wed 17 December 2008 16:22
- Dada97.2
- Juste Inscrit !
- Date d'inscription: 9 Dec 2008
- Messages: 7
Re: Calcul Dsitance Point droite en WGS84
Salut
La version scientifique de l'explication colle parfaitement avec le probleme lool (faudrait que je m'approprie ces termes un jour quand meme )
Merci encore
Hors ligne
#17 Thu 18 December 2008 14:42
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Bonjour,
Comme promis, voila l'explication détaillée
http://www.dlzlogic.com/Geodesie.pdf
Il est bien évident que toute remarque ou observation sera la bien venue.
bon courage.
Hors ligne
#18 Thu 18 December 2008 16:59
Re: Calcul Dsitance Point droite en WGS84
Pierre, ce document, c'est l'explication de comment on calcule une distance suivant la sphère, ou bien est-ce l'explication de la formule pour la distance d'un point à un segment ? Parce que je vois que le programme en copie d'écran fait cela. Mais je ne vois pas les algorithmes, à part ceux qui calculent d'une façon générale des distances et des azimuth entre points.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#19 Thu 18 December 2008 17:28
- Pierre Dolez
- Participant assidu
- Lieu: Proville
- Date d'inscription: 14 Aug 2008
- Messages: 519
- Site web
Re: Calcul Dsitance Point droite en WGS84
Il est vrai que je n'ai pas fait de fonction qui calcule la distance d'un point à un segmant, mais j'ai expliqué la formule. Ou plutôt j'ai explique comment, lorsqu'on connait dans un triangle sphérique la longueur AM et l'angle A, si ce triangle satisfait aux hypothèses de Legendre (excès sphérique) on peut calculer en géométrie plane.
Le source qui génère la fenêtre affiché est très grand, mais sans intérêt, puisqu'il ne s'agit que de saisie, transformation d'unités, affichage etc. Les fonctions permettant de transformer du LT93 en WGS sont dans une librairie dont j'ai cité l'auteur, et qui est libre.
Voila les lignes qui calculent la longueur de la projection
double Zap=CalcAzimut(LA,MA,LP,MP);
double ArcAP=CalcArc(LA,MA,LP,MP); // radians
fprintf(espion,"Azimut Zap =%f g\n",Zap);
double Zbp=CalcAzimut(LB,MB,LP,MP);
double ArcBP=CalcArc(LB,MB,LP,MP); // radians
fprintf(espion," azimut Zbp=%f g \n", Zbp);
// Calcul de¨PH , plus courte distance de P à AB
// l'angle en A est la différence des azimuts AB AP
double AngA=Zap-ZAB;
if (AngA > 100) AngA=200.0-AngA;
double eAP=(double)0.5*ArcAP*ArcAP*sin(AngA*M_PI/200.0) * 200 / M_PI; // ATTENTION
double DisAP=CalcLongArc(LA,MA,LP,MP);
double DisPHa=fabs(DisAP*sin((AngA-eAP/3)*M_PI/200.0));
fprintf(espion,"A partir de A AngA=%f g DisAP=%0.2f m. DisPHa=%0.2f m. \n",AngA,DisAP,DisPHa);
double AngB=Zbp-ZBA;
if (AngB > 100) AngB=200.0-AngB;
double eBP=(double)0.5*ArcBP*ArcBP*sin(AngB*M_PI/200.0) * 200 / M_PI; // ATTENION
double DisBP=CalcLongArc(LB,MB,LP,MP);
double DisPHb=fabs(DisBP*sin((AngB-eBP/3)*M_PI/200.0));
fprintf(espion,"A partir de B AngB=%f g DisBP=%0.2f m. DisPHb=%0.2f m. \n",AngB,DisBP,DisPHb);
eProj->Text=Ftoa((DisPHa+DisPHb)/2,2);
Seules les fonction concernant les deux problèmes de base me paraissaient dignes d'être jointes, le reste n'est que du petit calcul informatique. Mais bien sûr, je peux le rajouter. Il y a tout de même une autre application qui mériterait un module, c'est le calcul d'un point N à partir d'un point A à une distance donnée D et suivant un azimut Z. C'est un peu plus compliqué. Mais si ça intéresse quelqu'un ? à suivre.
Bonne soirée.
Dernière modification par Pierre Dolez (Fri 19 December 2008 21:41)
Hors ligne