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
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/mingo220/article/details/117672562
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。