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