it-swarm.cn

从旧+ n米计算新的经度,纬度

我想基于坐标和以米为单位的距离创建2个新经度和2个新纬度,我想在某个点周围创建一个Nice边界框。这是一个城市的一部分,最大±1500米。因此,我不认为必须考虑地球的曲率。

所以我有50.0452345(x)和4.3242234(y),我想知道x + 500米,x - 500米,y - 500米,y + 500米

我发现了许多算法,但几乎所有算法似乎都在处理点之间的距离。

65
Benjamin Udink ten Cate

每度经度的公里数约为

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

其中theta是以度为单位的纬度,r_earth约为6378 km。

每个纬度的公里数在所有位置大致相同,大约相同

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

只要dxdy与地球半径相比较小,你就不会太靠近极点。

98
nibot

接受的答案是完全正确和有效的。我做了一些调整,然后变成了这个:

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

希望这也有帮助。

20
Numan Karaaslan

对于纬度做:

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可以包含正值或负值。

11
ssten

你有没有检查过: 如何找到给定纬度/长度以北x km的纬度/长度

这些计算充其量是烦人的,我做了很多。 thersineine公式将是你的朋友。

一些参考: http://www.movable-type.co.uk/scripts/latlong.html

6
Ryan Ternier