通過百度,搜尋到了球面直線距離計算公式
比如你要求point1(lng1,lat1) 和 point2(lng2,lat2)的距離Distance,那麼
Distance = R*arccos(cos(lat1*pi/180 )*cos(lat2*pi/180)*cos(lng1*pi/180 -lng2*pi/180)+sin(lat1*pi/180 )*sin(lat2*pi/180))
其中,R=6370996.81 是地球半徑,pi為圓周率π,(lng1,lat1),(lng2,lat2)分别是point1和point2的經緯度
R = 6371004 #The radius of the earth
PI = 3.1415926
MAX_NUM = 10000
def get_distance(points):
length = len(points)
if length <= 1:
raise PathException('The length of points must be greater than or equal to 2')
distance = [[0 for col in range(length)] for row in range(length)]
for i in range(0,length-1):
for j in range(i+1,length):
f1 = points[i].find('(') + 1
f2 = points[i].find(',')
f3 = points[i].find(')')
lnga = float(points[i][f1:f2]) * PI /180
lngb = float(points[j][f1:f2]) * PI /180
lata = float(points[i][f2+1:f3]) * PI /180
latb = float(points[j][f2+1:f3]) * PI /180
C1 = math.cos(lata)*math.cos(latb)*math.cos(lnga-lngb)
C2 = C1 + math.sin(lata)*math.sin(latb)
D = R * math.acos(C2)
distance[i][j] = round(D,2)
distance[j][i] = distance[i][j]
distance[i][i] = MAX_NUM
distance[length-1][length-1] = MAX_NUM
return distance
points = ['Point(123.4201360000,41.7713180000)',#緻用路 1
'Point(123.4264960000,41.7752190000)',#北門 2
'Point(123.4262980000,41.7736180000)',#資訊科學與工程學院 3
'Point(123.4262620000,41.7722200000)',#恩承圖書館 4
'Point(123.4279150000,41.7706590000)',#材料與冶金學院 5
'Point(123.4250770000,41.7693010000)',#求實路 6
'Point(123.4289570000,41.7684940000)',#知行樓 7
'Point(123.4234060000,41.7722200000)'#漢卿北路 左8
'Point(123.4292630000,41.7719100000)' #漢卿北路 右8
]