如何找到给定纬度/长度东/西x km的纬度/经度?

时间:2009-10-06 15:39:08

标签: position distance latitude-longitude idl idl-programming-language

我有两个给定的lat和lon点。例如,假设我在坐标(lat1,lon1)和(lat2,lon2)处有两个位置(point_1和point_2)。 我想计算第三个点,即与point_2相同的纬度,但是在point_2的东边或西边x km。所以第三个点与point_2具有相同的纬度,但是不同的经度取决于距离x(以千米为单位),换句话说,point_3将是(lat2,lon?)。 我在IDL写这篇文章,但是非常欢迎任何其他语言或公式。

由于

2 个答案:

答案 0 :(得分:1)

你不在任何地方使用第1点,对吗?假设我们的观点是P =(lat,lon)

这样的问题的第一条规则:画一幅画!从地球的横截面看,你可以看到以地球轴为中心的圆的半径是R*cos(lat)。 (R是地球的半径。我希望你不需要在这里认为地球是一个椭圆体。)因此x长度占360*x/(2*pi*R*cos(lat))的角度(以度为单位)。你想要的新点是:

P' = ( lat, lon +- 180*x/(2Rcos(lat)) )

我假设您在西经时使用-180到0,所以东/西有+/-。你必须检查是否需要环绕。伪代码:

if (lon < -180)
   lon += 360
else if (long > 180)
   lon -= 360

只是为了好玩:如果你关心地球是椭圆形的,圆的半径是(而不是R * cos(纬度)):

1/sqrt(tan^2 lat / Rp^2 + 1 / Re^2)

其中Rp是极半径,Re是赤道半径。如果Rp = Re,则从1 + tan^2 lat = sec^2 lat

开始减少到原始公式

答案 1 :(得分:0)

import math

R = 6378.1 #Radius of the Earth
brng = 1.57 #Bearing is 90 degrees converted to radians.
d = 15 #Distance in km

#lat2  52.20444 - the lat result I'm hoping for
#lon2  0.36056 - the long result I'm hoping for.

lat1 = math.radians(52.20472) #Current lat point converted to radians
lon1 = math.radians(0.14056) #Current long point converted to radians

lat2 = math.asin( math.sin(lat1)*math.cos(d/R) +
     math.cos(lat1)*math.sin(d/R)*math.cos(brng))

lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),
             math.cos(d/R)-math.sin(lat1)*math.sin(lat2))

lat2 = math.degrees(lat2)
lon2 = math.degrees(lon2)

print(lat2)
print(lon2)