Si j'ai une lecture de latitude ou de longitude au format NMEA standard, existe-t-il un moyen / une formule simple pour convertir cette lecture en mètres, que je peux ensuite implémenter en Java (J9)?
Edit: Ok il semble que ce que je veux faire n'est pas possible facilement , mais ce que je veux vraiment faire est:
Disons que j'ai un lat et long d'un point de cheminement et un lat et long d'un utilisateur. Existe-t-il un moyen facile de les comparer pour décider quand dire à l'utilisateur qu'il se trouve à une distance raisonnablement proche du point de cheminement? Je me rends compte que le sujet est raisonnable, mais est-ce facilement faisable ou est-ce encore trop mathématique?
math
geolocation
geo
Adam Taylor
la source
la source
Réponses:
Voici une fonction javascript:
Explication: https://en.wikipedia.org/wiki/Haversine_formula
la source
Étant donné que vous recherchez une formule simple, c'est probablement la façon la plus simple de le faire, en supposant que la Terre est une sphère d'une circonférence de 40075 km.
Longueur en mètres de 1 ° de latitude = toujours 111,32 km
Longueur en mètres de 1 ° de longitude = 40075 km * cos (latitude) / 360
la source
Pour approximer les courtes distances entre deux coordonnées, j'ai utilisé des formules de http://en.wikipedia.org/wiki/Lat-lon :
.
Dans le code ci-dessous, j'ai laissé les nombres bruts pour montrer leur relation avec la formule de wikipedia.
L'entrée de wikipedia indique que les calculs de distance sont inférieurs à 0,6 m pour 100 km longitudinalement et 1 cm pour 100 km latitudinalement, mais je ne l'ai pas vérifié car près de cette précision convient à mon utilisation.
la source
Les latitudes et les longitudes spécifient des points, pas des distances, donc votre question est quelque peu absurde. Si vous demandez quelle est la distance la plus courte entre deux points (lat, lon), consultez cet article de Wikipedia sur les distances du grand cercle.
la source
Il existe de nombreux outils qui faciliteront cette tâche. Voir la réponse de monjardin pour plus de détails sur ce qui est impliqué.
Cependant, cela n'est pas forcément difficile. On dirait que vous utilisez Java, donc je vous recommande d'examiner quelque chose comme GDAL . Il fournit des wrappers java pour leurs routines, et ils ont tous les outils nécessaires pour convertir Lat / Lon (coordonnées géographiques) en UTM (système de coordonnées projetées) ou une autre projection cartographique raisonnable.
UTM est agréable, car ce sont des compteurs, si faciles à travailler. Cependant, vous devrez obtenir la zone UTM appropriée pour qu'elle fasse du bon travail. Il existe quelques codes simples disponibles via Google pour trouver une zone appropriée pour une paire lat / longue.
la source
La terre est une surface extrêmement irrégulière, il n'y a donc pas de formule simple pour le faire exactement. Vous devez vivre avec un modèle approximatif de la Terre et y projeter vos coordonnées. Le modèle que je vois généralement utilisé pour cela est le WGS 84 . C'est ce que les appareils GPS utilisent généralement pour résoudre exactement le même problème.
La NOAA a des logiciels que vous pouvez télécharger pour vous aider sur son site Web .
la source
Voici la version R de la fonction bh- , juste au cas où:
la source
Un mille marin (1852 mètres) est défini comme une minute d' arc de longitude à l'équateur. Cependant, vous devez définir une projection cartographique (voir aussi UTM ) dans laquelle vous travaillez pour que la conversion ait vraiment un sens.
la source
Il existe plusieurs façons de calculer cela. Tous utilisent des approximations de trigonométrie sphérique où le rayon est celui de la terre.
essayez http://www.movable-type.co.uk/scripts/latlong.html pour un peu de méthodes et de code dans différentes langues.
la source
la source
Pour convertir la latitude et la longitude en représentation x et y, vous devez décider du type de projection cartographique à utiliser. Quant à moi, Elliptical Mercator me semble très bien. Ici vous pouvez trouver une implémentation (en Java aussi).
la source
Si c'est suffisamment proche, vous pouvez vous en sortir en les traitant comme des coordonnées sur un plan plat. Cela fonctionne au niveau, par exemple, de la rue ou de la ville si une précision parfaite n'est pas requise et que tout ce dont vous avez besoin est une estimation approximative de la distance impliquée pour la comparer avec une limite arbitraire.
la source
Basé sur la distance moyenne de dégressivité dans la Terre.
1 ° = 111 km;
En convertissant cela en radians et en divisant en mètres, prenez un nombre magique pour le RAD, en mètres: 0,000008998719243599958;
puis:
la source
Si vous voulez une solution simple, utilisez la formule Haversine comme indiqué dans les autres commentaires. Si vous avez une application sensible à la précision, gardez à l'esprit que la formule Haversine ne garantit pas une précision meilleure que 0,5% car elle suppose que la Terre est une sphère. Pour considérer que la Terre est un sphéroïde aplati, envisagez d'utiliser les formules de Vincenty . De plus, je ne sais pas quel rayon nous devrions utiliser avec la formule Haversine: {Équateur: 6 378,137 km, Polaire: 6 356 752 km, Volumétrique: 6 371,0088 km}.
la source
it is assuming the earth is a circle
^^ Certaines personnes étranges font ça de nos jours ... mais ce que vous voulez dire est probablement plutôtit is assuming the earth is a sphere
;)Vous devez convertir les coordonnées en radians pour faire la géométrie sphérique. Une fois converti, vous pouvez calculer une distance entre les deux points. La distance peut alors être convertie en n'importe quelle mesure souhaitée.
la source