Calcul de distance entre deux points géographiques

Le
kael
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un couple
latitude/longitude, je souhaite savoir quels sont les n points les plus
proches d'un point donné.

--
kael
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain
Le #6651011
kael wrote:
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un couple
latitude/longitude, je souhaite savoir quels sont les n points les
plus proches d'un point donné.



C'est de la trigonométrie sphérique

http://fr.wikipedia.org/wiki/Trigonom%C3%A9trie_sph%C3%A9rique

Il faut d'abord trouver les distances qui sépares les points, en angles à la
surface de la Terre.

Et ensuite les convertir en distances.

--
Ne pas prévoir, c'est déjà gémir
Léonard de Vinci

Pierre Maurette
Le #6651001
kael wrote:
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un couple
latitude/longitude, je souhaite savoir quels sont les n points les
plus proches d'un point donné.



C'est de la trigonométrie sphérique


Pas nécessairement aussi simple. Il faudrait peut-être savoir le
domaine d'application. S'il s'agit d'un problème d'optimisation des
taxis dans une ville donnée, ce sera un problème simple de géométrie
plane. S'il s'agit d'une centrale de navigation envisageant
éventuellement des routes transocéaniques, il faudra peut-être se poser
la question loxo/ortho. S'il s'agit de sismologie ou autre, ou d'un GPS
pour les taupes, peut-être la distance ne sera pas à prendre ni à cap
constant, ni classiquement sur le grand cercle, mais simplement en
ligne droite, la nuance pour deux points antipodes étant quand même un
rapport 1,57 entre les deux interprêtation.

Ceci dit, la partie informatique du problème sera d'un autre ordre, à
savoir ne pas coder n'importe comment une formule correcte...


--
Pierre Maurette


Sylvain
Le #6654711
Pierre Maurette wrote:
kael wrote:
Bonjour,

Je cherche une formule pour calculer en Python la distance entre
deux points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un
couple latitude/longitude, je souhaite savoir quels sont les n
points les plus proches d'un point donné.



C'est de la trigonométrie sphérique


Pas nécessairement aussi simple. Il faudrait peut-être savoir le
domaine d'application. S'il s'agit d'un problème d'optimisation des
taxis dans une ville donnée, ce sera un problème simple de géométrie
plane. S'il s'agit d'une centrale de navigation envisageant
éventuellement des routes transocéaniques, il faudra peut-être se
poser la question loxo/ortho. S'il s'agit de sismologie ou autre, ou
d'un GPS pour les taupes, peut-être la distance ne sera pas à prendre
ni à cap constant, ni classiquement sur le grand cercle, mais
simplement en ligne droite, la nuance pour deux points antipodes
étant quand même un rapport 1,57 entre les deux interprêtation.

Ceci dit, la partie informatique du problème sera d'un autre ordre, à
savoir ne pas coder n'importe comment une formule correcte...



Le probléme de ce genre de question est que la réponse constitu un véritable
travail, on ne peut que orienter la personne qui pose la question pour qu'il
puisse lui même faire lui même ce travail.

--
Ne pas prévoir, c'est déjà gémir
Léonard de Vinci



Alain Reymond
Le #6657281
Bonjour,

Il faut chercher la formule "haversine". Il y a de nombreux exemples de
codage sur le net.

Pour ma part, j'utilise une version qui est une approximation de la
formule et donc pas la distance réelle mais suffit pour l'application
dont j'ai besoin : trouver les codes postaux dans un rayon de n kms
autour d'une commune donnée. Je n'ai pas besoin de la précision au cm!

Sinon : http://en.wikipedia.org/wiki/Haversine_formula
et c'est Geopy : http://exogen.case.edu/projects/geopy/

Cordialement,

Alain


CREATE OR REPLACE FUNCTION haversine(double precision, double precision,
double precision, double precision)
RETURNS double precision AS
'
/*
Retourne la distance Haversine deux points
Appel : Latitude1,Longitude1, Latitude2, Longitude2 en degrés, min.
Retourne : distance en kms.
*/

DECLARE
Latitude1 alias for $1;
Longitude1 alias for $2;
Latitude2 alias for $3;
Longitude2 alias for $4;
distance float8;
BEGIN
distance := 6372.795 * 3.1415926 *
sqrt(
(Latitude1-Latitude2)*(Latitude1-Latitude2)
+

cos(Latitude1/57.29578)*cos(Latitude2/57.29578)*(Longitude1-Longitude2)*(Longitude1-Longitude2)

)
/ 180;
return distance;
END;
'
LANGUAGE 'plpgsql' VOLATILE STRICT;



Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un couple
latitude/longitude, je souhaite savoir quels sont les n points les
plus proches d'un point donné.


val
Le #6657271
On 18 mai, 11:15, kael
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un co uple
latitude/longitude, je souhaite savoir quels sont les n points les plus
proches d'un point donné.

--
kael


Bonjour,

Beaucoup de formules utiles de trigo sphérique ici :
http://mathforum.org/library/drmath/sets/select/dm_lat_long.html

val

OdarR
Le #6661401
On 18 mai, 11:15, kael
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un co uple
latitude/longitude, je souhaite savoir quels sont les n points les plus
proches d'un point donné.

--
kael


j'ai du jouer avec ça l'année passée, dans le domaine GSM,
pour calculer quelles antennes "voient" une maison ou une zone
particulière.

je me suis pas mal inspiré de cette page :
http://www.movable-type.co.uk/scripts/latlong.html

beaucoup de plaisir en perspective. :-)

l'idée est aussi de passer dans un systeme de coordonées plan
pour simplifier les calculs lorsque la précision à quelques mètres
suffit.

Olivier

Denis Feldmann
Le #6662641
On 18 mai, 11:15, kael
Bonjour,

Je cherche une formule pour calculer en Python la distance entre deux
points à partir de leurs coordonnées géographiques.

Plus précisément, à partir d'une liste de points définis par un couple
latitude/longitude, je souhaite savoir quels sont les n points les plus
proches d'un point donné.

--
kael


j'ai du jouer avec ça l'année passée, dans le domaine GSM,
pour calculer quelles antennes "voient" une maison ou une zone
particulière.

je me suis pas mal inspiré de cette page :
http://www.movable-type.co.uk/scripts/latlong.html

beaucoup de plaisir en perspective. :-)

l'idée est aussi de passer dans un systeme de coordonées plan
pour simplifier les calculs lorsque la précision à quelques mètres
suffit.



Mmm... je voulais pas intervenir, mais l'ensemble de ces formules est
assez facile à réétablir : en coordonnées sphériques "normalisées", on
a x= cos Lo cos La ,y= sin Lo cos La , z= sin La, où Lo est la
longitude et La la latitude (en radians ou prendre les fonctions trigo
en degrés aussi), et alors la distance de deux points est R alpha (où R
est le rayon terrestre), l'angle alpha les séparant vérifiant cos alpha
= (xx+yy'+zz'). Il est tout à fait inutile de se simplifier encore la
vie avec des formules approchées, puisque n'importe quelle calculette
donnera ces valeurs instantanément.

Mais il y a un énorme mais : la précision est très médiocre,
contrairement à ce que dit le site anglais mentionné plus haut : la
terre est un ellipsoide, et l'aplatissement aux pôles est de près de
1/300, ce qui modifie considérablement ces formules (de près de 100 kms
pour la distance des pôles)...



Olivier



OdarR
Le #6662631
On 19 mai, 20:38, Denis Feldmann wrote:
Mmm... je voulais pas intervenir, mais l'ensemble de ces formules est
assez facile à réétablir : en coordonnées sphériques "normalis ées",  on
a x=  cos Lo cos La ,y= sin  Lo cos La , z=  sin La, où Lo e st la
longitude et La la latitude (en radians ou prendre les fonctions trigo
en degrés aussi), et alors la distance de deux points est R alpha (où R
est le rayon terrestre), l'angle alpha les séparant vérifiant cos alph a
= (xx+yy'+zz'). Il est tout à fait inutile de se simplifier encore la
vie avec des formules approchées, puisque n'importe quelle calculette
donnera ces valeurs instantanément.


tout a fait, on peut prendre la formule non simplifiée,
c'est ce que j'avais fait il me semble.

Mais il y a un énorme mais : la précision est très médiocre,
contrairement à ce que dit le site anglais mentionné plus haut : la
terre est un ellipsoide, et l'aplatissement aux pôles est de près de
1/300, ce qui modifie considérablement ces formules (de près de 100 km s
pour la distance des pôles)...


pour mes calculs, je tenais compte de la variation du R selon la
latitude,
j'ai plus la référence ici, mais je peux la retrouver si nécessaire,
tout en calculant des distances "localement" (quelques km).
car bien sur, la Terre est une boule qui n'est pas parfaitement
sphérique.

ces formules sus-mentionnées conviennent néanmoins très bien pour des
calculs
de quelques km, avec une précision de quelques mètres, pour le
problème qui m'occupait...
couverture d'une antenne (un secteur typiquement).

Olivier

Olivier Masson
Le #17832151
OdarR a écrit :
On 19 mai, 20:38, Denis Feldmann wrote:
Mmm... je voulais pas intervenir, mais l'ensemble de ces formules est
assez facile à réétablir : en coordonnées sphériques "normalisées", on
a x= cos Lo cos La ,y= sin Lo cos La , z= sin La, où Lo est la
longitude et La la latitude (en radians ou prendre les fonctions trigo
en degrés aussi), et alors la distance de deux points est R alpha (où R
est le rayon terrestre), l'angle alpha les séparant vérifiant cos alpha
= (xx+yy'+zz'). Il est tout à fait inutile de se simplifier encore la
vie avec des formules approchées, puisque n'importe quelle calculette
donnera ces valeurs instantanément.



tout a fait, on peut prendre la formule non simplifiée,
c'est ce que j'avais fait il me semble.

Mais il y a un énorme mais : la précision est très médiocre,
contrairement à ce que dit le site anglais mentionné plus haut : la
terre est un ellipsoide, et l'aplatissement aux pôles est de près de
1/300, ce qui modifie considérablement ces formules (de près de 100 kms
pour la distance des pôles)...



pour mes calculs, je tenais compte de la variation du R selon la
latitude,
j'ai plus la référence ici, mais je peux la retrouver si nécessaire,
tout en calculant des distances "localement" (quelques km).
car bien sur, la Terre est une boule qui n'est pas parfaitement
sphérique.

ces formules sus-mentionnées conviennent néanmoins très bien pour des
calculs
de quelques km, avec une précision de quelques mètres, pour le
problème qui m'occupait...
couverture d'une antenne (un secteur typiquement).

Olivier




Je vous remercie pour vos réponses puisque j'allais poser la même question.
Et comme je vois que "kael" à l'origine de la question n'a jamais cru
bon de vous remercié, je le fais à sa place :)

Je souhaitais faire ça pour des calculs de distance qui ne dépasseront
pas la centaine de km. D'après ce que vous dites, ça devrait donc convenir.
Publicité
Poster une réponse
Anonyme