Suite

Algorithme de décalage d'une latitude/longitude d'un certain nombre de mètres


Je recherche un algorithme qui, une fois donné une paire de latitude et de longitude et une traduction vectorielle en mètres en coordonnées cartésiennes (x,y), me donnerait une nouvelle coordonnée. Un peu comme un Haversine inversé. Je pourrais aussi travailler avec une transformation de distance et de cap, mais ce serait probablement plus lent et moins précis. Idéalement, l'algorithme devrait être rapide car je travaille sur un système embarqué. La précision n'est pas critique, à moins de 10 mètres serait bien.


Si vos déplacements ne sont pas trop importants (moins de quelques kilomètres) et que vous n'êtes pas juste aux pôles, utilisez l'estimation rapide et sale que 111 111 mètres (111,111 km) dans la direction y est 1 degré (de latitude) et 111 111 * mètres cos(latitude) dans la direction x correspondent à 1 degré (de longitude).


Comme le dit Liedman dans sa réponse, les formules aéronautiques de Williams sont une source inestimable, et pour maintenir la précision à moins de 10 mètres pour des déplacements jusqu'à 1 km, vous devrez probablement utiliser les plus complexes d'entre elles.

Mais si vous êtes prêt à accepter des erreurs supérieures à 10 m pour des points décalés de plus de 200 m environ, vous pouvez utiliser un calcul simplifié de la terre plate. Je pense que les erreurs seront toujours inférieures à 50m pour des déports jusqu'à 1km.

//Position, degrés décimaux lat = 51.0 lon = 0.0 //Rayon de la Terre, sphère R=6378137 //décalages en mètres dn = 100 de = 100 //Décalages des coordonnées en radians dLat = dn/R dLon = de/(R* Cos(Pi*lat/180)) //OffsetPosition, degrés décimaux latO = lat + dLat * 180/Pi lonO = lon + dLon * 180/Pi

Cela devrait retourner:

latO = 51 00089832 lonO = 0,001427437

Je trouve que Aviation Formulary, ici, est idéal pour ces types de formules et d'algorithmes. Pour votre problème, consultez le "lat/long donné radial et distance":ici

Notez que cet algorithme peut être un peu trop complexe pour votre utilisation, si vous souhaitez limiter l'utilisation des fonctions de trigonométrie, etc.


Il peut être judicieux de projeter le point en premier. Vous pourriez faire quelque chose comme ce pseudo-code :

falt_coordinate = latlon_to_utm(original_koordinate) new_flat_coordinate = flat_coordinate + (x,y) result_coordinate = utm_to_latlon(new_flat_coordinate)

où (x,y) est le décalage souhaité.

Vous n'avez pas besoin d'utiliser utm, tout système de coordonnées plat, qui a du sens dans votre région fera l'affaire.

Avec quel logiciel travailles-tu ?


J'ai créé une carte personnalisée simple sur Google Maps qui illustre l'algorithme d'estimation mentionné par la réponse acceptée (1/111111 == un mètre). N'hésitez pas à le voir et à jouer avec ici :

https://drive.google.com/open?id=1XWlZ8BM00PIZ4qk43DieoJjcXjK4z7xe&usp=sharing


Voici le code python pour la réponse de whuber

à partir des mathématiques importer cos, radians def meter_to_lat_lon_displacement(m, origin_latitude): lat = m/111111 lon = m/(111111 * cos(radians(origin_latitude))) return lat, lon

La formule directe de Vincenty devrait faire l'affaire.


Voir la vidéo: Convertir les coordonnées et chercher leurs localisations avec Google earth Pro (Octobre 2021).