2

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

谢谢

4

2 回答 2

2

您不会在任何地方使用第 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(lat)):

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

其中 Rp 是极半径,Re 是赤道半径。如果 Rp = Re,这将简化为原始公式,因为1 + tan^2 lat = sec^2 lat

于 2009-10-06T15:48:58.930 回答
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)
于 2017-07-31T08:53:16.103 回答