import math
def get_end_lonlat(lon, lat, angle, distance):
R = 6371.393 #地球半径
AB = distance #行进距离
ang = math.radians(angle)
lat0 = math.radians(lat)
nAB = AB / (R * 2)
ab = R * math.sin(nAB / 2) * 2
ac = ab * math.cos(ang)
bc = ab * math.sin(ang)
nAC = math.asin(ac / R) * 2
nBC = math.asin(bc / R) * 2
lat1 = lat0 + nAC
lon1 = lon + math.degrees(nBC)
lat1 = math.degrees(lat1)
return lon1, lat1
def get_point(lon, lat, angle, distance):
while angle < 0 or angle > 360:
if angle < 0:
angle += 360
elif angle > 360:
angle -= 360
if (angle >= 0 and angle <= 90):
lon1, lat1 = get_end_lonlat(lon, lat, angle, distance)
elif (angle >= 90 and angle <= 180):
lon1, lat1 = get_end_lonlat(lon, lat, 180 - angle, distance)
lat1 -= 2 * (lat1 - lat)
elif (angle >= 180 and angle <= 270):
lon1, lat1 = get_end_lonlat(lon, lat, angle - 180, distance)
lat1 -= 2 * (lat1 - lat)
lon1 -= 2 * (lon1 - lon)
elif (angle >= 270 and angle <= 360):
lon1, lat1 = get_end_lonlat(lon, lat, 360 - angle, distance)
lon1 -= 2 * (lon1 - lon)
else:
lon1, lat1 = None, None
return lon1, lat1
get_point(127, 16, 60, 80)
【python】已知起始点经纬度坐标、偏转角、距离,求终点经纬度坐标
最新推荐文章于 2024-04-28 13:26:29 发布