9
votes

transformer la latitude de longitude en mètres

J'ai besoin d'une fonction qui mappe des positions GPS sur des valeurs X / Y comme ceci: xxx

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?


0 commentaires

3 Réponses :


2
votes

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.

mise à jour

J'ai trouvé une implémentation Java de la fonction Harvesine dans une autre question Stackoverflow


0 commentaires

2
votes

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");


0 commentaires

20
votes

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 Deltatalatitude * 40008000/360 code>. P>

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 Deltalongitude * 40075160 * COS (latitude) / 360 Code>. P>

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 à 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


5 commentaires

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?