Расчет новой долготы, широты от старых + n метров


Я хочу создать 2 новые долготы и 2 новые широты на основе координаты и расстояния в метрах, я хочу создать хороший ограничивающий прямоугольник вокруг определенной точки. Свои малый диапазон и максимальные 1500meters + и 1500meter. Так что для части города, я не думаю, что кривая земли должна быть принята во внимание.

Так я 50.0452345(X) и 4.3242234(Y) и я хочу знать, х+500 метров, х-500 метров, г-500 метров, г+500 метров

Я нашел много алгоритмов, но почти все справляются с расстоянием между точками.

4 54

4 ответа:

количество километров на градус долготы составляет примерно

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

здесь theta - широта в градусах и r_earth примерно 6378 км.

количество километров на градус широты примерно одинаково во всех местах, приблизительно

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

так что вы можете сделать:

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

пока dx и dy малы по сравнению с радиусом Земли, и вы не слишком близко к полюсам.

принятый ответ совершенно прав и работает. Я сделал некоторые хитрости и превратился в это:

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

надеюсь, это тоже поможет.

вы проверили: Как найти lat / long, который находится в x км к северу от заданного lat / long ?

эти расчеты раздражают в лучшем случае, я сделал многие из них. Формула haversine будет вашим другом.

некоторые ссылки:http://www.movable-type.co.uk/scripts/latlong.html

для широты:

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

для долготы делать:

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

переменная your_meters может содержать положительное или отрицательное значение.