transformer longitude latitude en mètres
J'ai besoin d'une fonction qui cartes gps de la position de x/y, les valeurs comme ceci:
getXYpos(GeoPoint relativeNullPoint, GeoPoint p){
deltaLatitude=p.latitude-relativeNullPoint.latitude;
deltaLongitude=p.longitude-relativeNullPoint.longitude;
...
resultX=latitude (or west to east) distance in meters from p to relativeNullPoint
resultY=longitude (or south to north) distance in meters from p to relativeNullPoint
}
j'ai vu que certaines implémentations de "distance de deux geoPoints" mais ils ont tous simplement calculer la distance à vol d'.
je pense que le deltaLongitude peut être transformé en mètres, mais l'deltaLatitude dépend de la Longitude. personne ne sait comment ce problème peut être résolu?
OriginalL'auteur Simon Heinen | 2010-06-11
Vous devez vous connecter pour publier un commentaire.
Pour commencer, je pense que vous avez votre latitude et longitude inversée. Longitude mesures de X, et la latitude des mesures Y.
La latitude est facile de se transformer en une distance nord-sud. Nous savons que la 360 degrés est un cercle complet autour de la terre à travers les pôles, et cette distance est 40008000 mètres. Tant que vous n'avez pas besoin de compte pour les erreurs dues à la terre n'étant pas parfaitement sphérique, la formule est
deltaLatitude * 40008000 /360
.La partie la plus délicate est la conversion de longitude à l'X, comme vous soupçonne. Car il dépend de la latitude que vous devez décider de la latitude que vous allez utiliser - vous pouvez choisir la latitude de votre origine, de la latitude de votre lieu de destination, ou un point arbitraire entre les deux. La circonférence à l'équateur (latitude 0) est 40075160 mètres. La circonférence d'un cercle à une latitude sera proportionnelle au cosinus, donc, la formule sera
deltaLongitude * 40075160 * cos(latitude) /360
.Edit: Votre commentaire indique que vous avez eu quelques ennuis avec la longitude de la formule; vous pourriez avoir utilisé degrés au lieu de radians dans l'appel à
cos
, c'est une erreur de débutant. Assurez-vous il n'y a pas d'ambiguïté, ici du travail code en Python.J'ai choisi d'utiliser le relativeNullPoint latitude pour le X de calcul. Ceci a l'avantage que si vous convertissez plusieurs points avec la même longitude, ils auront les mêmes X; lignes nord-sud sera à la verticale.
Modifier à nouveau: je devrais avoir souligné qu'il s'agit d'une formule très simple, et vous devez connaître ses limites. Évidemment, la terre n'est pas plate, de sorte que toute tentative de la carte de coordonnées XY va impliquer des compromis. La formule que j'ai calculé ci-dessus fonctionne mieux lorsque la zone que vous êtes la conversion est assez petit pour envisager plat, et où la légère courbure et de la non-parallélisme des lignes nord-sud peut être ignoré. Il y a toute une science de projections cartographiques; si vous voulez voir certains de possibilités, un bon endroit pour commencer serait Wikipédia. Cette projection est connu comme la projection Équirectangulaire, avec un supplément de mise à l'échelle.
vérifier la mise à jour.
merci beaucoup! fonctionne très bien 🙂
Je viens de vérifier certaines de mes sources (comme le lien que vous m'envoyer geography.about.com/library/faq/blqzcircumference.htm ) et essayé de calculer la terre cirumfence moi-même: c=2*PI*r=2*PI*6.378.137 m=40.075.017 m donc je pense que le 40075160m valeur utilisée partout, c'est mal.. je me suis r à partir de en.wikipedia.org/wiki/... donc, c'est probablement correcte. même problème pour la circumfence à travers les pôles: là, je reçois 39.940.653 qui est d'une extrême différence de la 40.008.000 de valeur..
ok la terre n'est pas une sphère parfaite;) je pense que c'est ce qui explique les déviants valeurs, en particulier l'un pour le pôle de la circonférence . mais quelle est la circonférence du géoïde est-il calculé?
OriginalL'auteur Mark Ransom
Harvesine fonction de ce que vous avez besoin.
Check it out à meubles-types Il y a de la Distance, l'azimut, Milieu et d'autres choses Javascript travail de mise en œuvre de vraiment bon.
Mise à JOUR
J'ai trouvé une implémentation Java de Harvesine fonction dans un autre stackoverflow question
OriginalL'auteur user347594
Il existe des bibliothèques sur jstott.moi.royaume-uni pour PHP, Java et Javascript qui ne sont, par exemple,
OriginalL'auteur skaffman