Question

J'utilise OpenLayers avec une carte mercator ordinaire et je suis en train de déguster un cadre de sélection en trouvant une grille de points dans LatLong. Le bbox est exprimé en LatLon, par exemple.

48.1388,-15.3616,55.2057,-3.9359

I peut définir une distance degrés (par exemple x: 2,5, y: 2,4) et travailler sur des points à partir de là. Mais je voudrais exprimer cette distance en mètres (par exemple 50000) afin de le relier à l'état d'esprit de l'utilisateur (les gens comprennent mètres, non degrés). Comment puis-je convertir cette distance? Je sais comment reprojeter un point, mais pas loin.

Merci pour toutes les notes! Mulone

Était-ce utile?

La solution

Utilisez le Haversine formule pour obtenir la distance entre deux points de lat / long. Cela suppose la terre est une sphère (qui est, pour la plupart des cas, « assez bien »).

Une mise en œuvre Javascript de celui-ci (sans vergogne volé ) ressemble à ceci:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

Autres conseils

sans tenir compte de la forme légèrement non sphérique de la terre,

Une minute de latitude nord au sud = 1 Mile = nautique 6075 pieds Donc, un degré = 60 minutes = 60 * 6075 pieds Il y a 3,28 pieds dans un mètre si Un degré = 60 * 6075 / 3,28 Mètres = 111,128 mètres

Alternativement, une minute de latitude = 1.852 Mètres Donc, un degré = 60 * 1852 mètres = 111,120 mètres

Je ne sais pas qui est plus précis ...

Pour un degré de longitude, faire la même chose, mais Multiplier par le Cosinus (Latitude) depuis les lignes de longitude se rapprochent que vous dirigent vers le nord.

La transformation entre les degrés et mètres varie sur la surface de la Terre.

En supposant une forme sphérique de la Terre, degrés de latitude = distance * 360 / (2 * PI * 6400000)

Notez que la longitude varie en fonction de la latitude:

longitude Degrés = distance * 360 * / (2 * PI * cos (latitude))

Le ci-dessus est pour la surface de la Terre, et ne pas utiliser la projection de Mercator. Si vous souhaitez travailler avec la distance linéaire projetée, alors vous aurez besoin d'utiliser la projection de Mercator.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top