Расчет новой долготы, широты от старых + n метров
Я хочу создать 2 новые долготы и 2 новые широты на основе координаты и расстояния в метрах, я хочу создать хороший ограничивающий прямоугольник вокруг определенной точки. Свои малый диапазон и максимальные 1500meters + и 1500meter. Так что для части города, я не думаю, что кривая земли должна быть принята во внимание.
Так я 50.0452345(X) и 4.3242234(Y) и я хочу знать, х+500 метров, х-500 метров, г-500 метров, г+500 метров
Я нашел много алгоритмов, но почти все справляются с расстоянием между точками.
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
может содержать положительное или отрицательное значение.