计算三个经纬度坐标的夹角

import math

def geo2xyz(lat, lng, r=6400):
    ''' 将地理经纬度转换成笛卡尔坐标系 :param lat: 纬度 :param lng: 经度 :param r: 地球半径 :return: 返回笛卡尔坐标系 '''
    thera = (math.pi * lat) / 180
    fie = (math.pi * lng) / 180
    x = r * math.cos(thera) * math.cos(fie)
    y = r * math.cos(thera) * math.sin(fie)
    z = r * math.sin(thera)
    return [x,y,z]

def get_angle(l1, l2, l3):
    ''' :param l1: 经纬度 :param l2: 顶点经纬度 :param l3: 经纬度 :return: 线段l2-l1 与 l2-l3之间的角度 '''
    p1 = geo2xyz(l1[0], l1[1])
    p2 = geo2xyz(l2[0], l2[1])
    p3 = geo2xyz(l3[0], l3[1])

    _P1P2 = math.sqrt((p2[0] - p1[0]) ** 2 + (p2[1] - p1[1]) ** 2 + (p2[2] - p1[2]) ** 2)
    _P2P3 = math.sqrt((p3[0] - p2[0]) ** 2 + (p3[1] - p2[1]) ** 2 + (p3[2] - p2[2]) ** 2)
    P = (p1[0] - p2[0]) * (p3[0] - p2[0]) + (p1[1] - p2[1]) * (p3[1] - p2[1]) + (p1[2] - p2[2]) * (p3[2] - p2[2])
    angle = (math.acos(P / (_P1P2 * _P2P3)) / math.pi) * 180
    return angle
    原文作者:明子哥哥
    原文地址: https://blog.csdn.net/mingo220/article/details/117672562
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞