【python】已知起始点经纬度坐标、偏转角、距离,求终点经纬度坐标

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)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值