156 votes

Comment faire pour convertir la latitude ou la longitude de mètres?

Si j'ai une latitude ou la longitude de la lecture dans la norme NMEA format est-il un moyen facile / formule pour convertir que la lecture des compteurs, que je peux ensuite mettre en œuvre en Java (J9)?

Edit: Ok semble ce que je veux faire n'est pas possible facilement, mais ce que je veux vraiment faire est:

Dire que j'ai un lat et long d'un chemin et d'un lat et long d'un utilisateur est-il un moyen facile de les comparer, afin de décider quand à indiquer à l'utilisateur qu'ils sont dans un raisonnablement proche de la distance du point de route? Je me rends compte raisonnable est soumis mais est-ce facilement faisable ou encore trop de maths-y?

212voto

b-h- Points 268

Voici une fonction javascript:

function measure(lat1, lon1, lat2, lon2){  // generally used geo measurement function
    var R = 6378.137; // Radius of earth in KM
    var dLat = (lat2 - lat1) * Math.PI / 180;
    var dLon = (lon2 - lon1) * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;
    return d * 1000; // meters
}

34voto

JJones Points 154

Pour l'estimation des distances courtes entre deux coordonnées, j'ai utilisé les formules de http://en.wikipedia.org/wiki/Lat-lon:

m_per_deg_lat = 111132.954 - 559.822 * cos( 2 * latMid ) + 1.175 * cos( 4 * latMid);
m_per_deg_lon = 111132.954 * cos ( latMid );

.

Dans le code ci-dessous j'ai laissé les chiffres bruts de montrer leur rapport à la formule de wikipedia.

double latMid, m_per_deg_lat, m_per_deg_lon, deltaLat, deltaLon,dist_m;

latMid = (Lat1+Lat2 )/2.0;  // or just use Lat1 for slightly less accurate estimate


m_per_deg_lat = 111132.954 - 559.822 * cos( 2.0 * latMid ) + 1.175 * cos( 4.0 * latMid);
m_per_deg_lon = (3.14159265359/180 ) * 6367449 * cos ( latMid );

deltaLat = fabs(Lat1 - Lat2);
deltaLon = fabs(Lon1 - Lon2);

dist_m = sqrt (  pow( deltaLat * m_per_deg_lat,2) + pow( deltaLon * m_per_deg_lon , 2) );

L'entrée de wikipedia stipule que la distance des calcs sont à moins de 0,6 m pour 100 km longitudinalement et 1 cm pour 100 km latitudinally mais je n'ai pas vérifié ce que n'importe où près que la précision est très bien pour mon utilisation.

10voto

John Feminella Points 116878

Les Latitudes et longitudes de spécifier des points, pas des distances, de sorte que votre question est un peu absurde. Si vous vous posez à propos de la distance la plus courte entre deux (lat, lon) points, voir cet article de Wikipedia sur le grand cercle, les distances.

7voto

Reed Copsey Points 315315

Il existe de nombreux outils permettant de rendre cet facile. Voir monjardin la réponse pour plus de détails sur ce qui est impliqué.

Cependant, cela n'est pas nécessairement difficile. Il semble que vous êtes à l'aide de Java, donc je vous conseille de regarder dans quelque chose comme GDAL. Il fournit java wrappers pour leurs routines, et ils ont tous les outils nécessaires pour convertir de latitude/Longitude (coordonnées géographiques) UTM (système de coordonnées projetées) ou d'une autre projection de la carte.

L'UTM est agréable, parce qu'il est mètres de, si facile de travailler avec. Toutefois, vous aurez besoin d'obtenir le approprié de la zone UTM pour faire un bon travail. Il y a quelques simples codes disponibles via googler pour trouver une zone appropriée pour un lat/long de la paire.

2voto

Judge Maygarden Points 14964

Un mille marin (1852 mètres) est définie comme une minutes d'arc du méridien à l'équateur. Toutefois, vous devez définir une projection de la carte (voir aussi UTM) dans lequel vous travaillez pour la conversion à vraiment un sens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X