web-dev-qa-db-fra.com

Calcul de la nouvelle longitude, latitude à partir des anciens + n mètres

Je veux créer 2 nouvelles longitude et 2 nouvelles latitudes basées sur une coordonnée et une distance en mètres, je veux créer un joli cadre de délimitation autour d'un certain point. C'est pour une partie d'une ville et max ± 1500 mètres. Je ne pense donc pas que la courbure de la terre doive être prise en compte.

Donc j'ai 50.0452345 (x) et 4.3242234 (y) et je veux savoir x + 500 mètres, x - 500 mètres, y - 500 mètres, y + 500 mètres

J'ai trouvé de nombreux algorithmes mais presque tous semblent gérer la distance entre les points.

70

Le nombre de kilomètres par degré de longitude est d'environ

(2*pi/360) * r_earth * cos(theta)

theta est la latitude en degrés et r_earth est d'environ 6378 km.

Le nombre de kilomètres par degré de latitude est approximativement le même à tous les endroits, environ

(2*pi/360) * r_earth = 111 km / degree 

Vous pouvez donc faire:

new_latitude  = latitude  + (dy / r_earth) * (180 / pi);
new_longitude = longitude + (dx / r_earth) * (180 / pi) / cos(latitude * pi/180);

Tant que dx et dy sont petits par rapport au rayon de la terre et que vous ne vous approchez pas trop des pôles.

103
nibot

La réponse acceptée est parfaitement correcte et fonctionne. J'ai fait quelques ajustements et je me suis transformé en ceci:

double meters = 50;

// number of km per degree = ~111km (111.32 in google maps, but range varies
   between 110.567km at the equator and 111.699km at the poles)
// 1km in degree = 1 / 111.32km = 0.0089
// 1m in degree = 0.0089 / 1000 = 0.0000089
double coef = meters * 0.0000089;

double new_lat = my_lat + coef;

// pi / 180 = 0.018
double new_long = my_long + coef / Math.cos(my_lat * 0.018);

J'espère que cela aide aussi.

20
Numan Karaaslan

Pour la latitude, faites:

var earth = 6378.137,  //radius of the earth in kilometer
    pi = Math.PI,
    m = (1 / ((2 * pi / 360) * earth)) / 1000;  //1 meter in degree

var new_latitude = latitude + (your_meters * m);

Pour la longitude:

var earth = 6378.137,  //radius of the earth in kilometer
    pi = Math.PI,
    cos = Math.cos,
    m = (1 / ((2 * pi / 360) * earth)) / 1000;  //1 meter in degree

var new_longitude = longitude + (your_meters * m) / cos(latitude * (pi / 180));

La variable your_meters peut contenir une valeur positive ou négative.

13
ssten

Avez-vous vérifié: Comment puis-je trouver le lat/long qui est x km au nord d'un lat/long donné ?

Ces calculs sont au mieux ennuyeux, j'en ai fait beaucoup. La formule haversine sera votre amie.

Quelques références: http://www.movable-type.co.uk/scripts/latlong.html

6
Ryan Ternier