J'ai besoin d'une fonction qui mappe des positions GPS sur des valeurs X / Y comme ceci: J'ai vu des implémentations de "distance de deux géopoints", mais ils calculent tous simplement l'air distance de la ligne.
Je pense que la deltalement peut être transformée en mètres directement, mais la deltalatitude dépend de la longitude. Est-ce que quelqu'un sait comment ce problème peut être résolu? p> p>
3 Réponses :
La fonction Harvesine est ce dont vous avez besoin. Vérifiez-le à Types mobiles Il y a la distance, le roulement, le point central Et d'autres choses, la mise en œuvre JavaScript fonctionne vraiment bien. p>
mise à jour em> strong> p>
J'ai trouvé une implémentation Java de la fonction Harvesine dans une autre question Stackoverflow p>
Il y a des bibliothèques sur jstott.me.uk pour PHP , Java et JavaScript lequel faisiez-le, par exemple
var lld1 = new LatLng(40.718119, -73.995667); // New York document.write("New York Lat/Long: " + lld1.toString() + "<br />"); var lld2 = new LatLng(51.499981, -0.125313); // London document.write("London Lat/Long: " + lld2.toString() + "<br />"); var d = lld1.distance(lld2); document.write("Surface Distance between New York and London: " + d + "km");
Pour commencer, je pense que vous avez votre latitude et longitude inversée. Mesures de longitude x et mesures de latitude Y.
La latitude est facile à transformer en une distance nord-sud. Nous savons que 360 degrés est un cercle complet autour de la terre à travers les poteaux et Cette distance est 40008000 mètres . Tant que vous n'avez pas besoin de prendre en compte les erreurs dues à la Terre étant PAS parfaitement sphérique, la formule est La partie délicate est la conversion Longitude to x, comme vous le soupçonnez. Comme cela dépend de la latitude dont vous avez besoin pour choisir la latitude que vous allez utiliser - vous pouvez choisir la latitude de votre origine, la latitude de votre destination ou un point arbitraire entre les deux. La circonférence de l'équateur (latitude 0) est de 40075160 mètres. La circonférence d'un cercle à une latitude donnée sera proportionnelle au cosinus, la formule sera donc Modifier : strong> Votre commentaire indique que vous avez eu des problèmes avec la formule de longitude; Vous avez peut-être utilisé des diplômes au lieu de radians dans l'appel à Deltatalatitude * 40008000/360 code>. P>
Deltalongitude * 40075160 * COS (latitude) / 360 Code>. P>
cos code>, c'est une erreur commune des recrues. Pour vous assurer qu'il n'y a pas d'ambiguïté, voici le code de travail de Python. P>
def asRadians(degrees):
return degrees * pi / 180
def getXYpos(relativeNullPoint, p):
""" Calculates X and Y distances in meters.
"""
deltaLatitude = p.latitude - relativeNullPoint.latitude
deltaLongitude = p.longitude - relativeNullPoint.longitude
latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude))
resultX = deltaLongitude * latitudeCircumference / 360
resultY = deltaLatitude * 40008000 / 360
return resultX, resultY
Ok j'ai essayé cela et le calcul du latitude est très précis :) Mais les valeurs de mètre de longitude sont toujours le facteur 1.3 à gros pour les tests im de la latitude. Je pense que ce n'est pas une bonne idée de simplement diviser par ce facteur, car il va probablement différer pour différentes latitudes, peut-être que la circonférence de la Terre doit être calculée par rapport à la latitude actuelle?
Je viens de vérifier certaines de mes sources (comme le lien que vous m'envoyez Geography.about.com/ bibliothèque / faq / blqzcircummence.htm ) et a essayé de calculer le Cirumfence de la Terre moi-même: C = 2 * pi * r = 2 * pi * 6.378.137m = 40.075.017m Donc, je pense que la valeur 40075160M utilisée partout est fausse .. Je suis r de en.wikipedia.org/wiki/... pour C'est probablement correct. Même problème pour la circonfanification à travers les Polonais: il y a 39.940.653 qui est une différence extrême à la valeur 40.008.000 ..
Ok, la terre n'est pas une sphère parfaite;) Je pense que cela expliquera les valeurs déviantes, en particulier celle pour la pôle-circonférence. Mais comment la circonférence du géoïde est-elle calculée?
@Sponge, je ne sais pas comment les circonférences ont été calculées - je fais juste confiance à mes sources. Vous êtes libre d'utiliser différentes valeurs si cela fonctionne pour votre application. Vous n'avez jamais spécifié les besoins de précision de votre application - la différence entre deux circonférence à travers les chiffres de Polonais est inférieur à 0,2%.
Que voulez-vous dire par la terre n'est pas plat?