from math import radians, cos, sin, asin, sqrt
#公式计算两点间距离(m)defdistance_from_longlat_asmath_function(lng1 =120.12802999999997,lat1 =30.28708,lng2=115.86572000000001,lat2 =28.7427):
lng1, lat1, lng2,lat2 =map(radians,[float(lng1),float(lat1),float(lng2),float(lat2)])
dlon = lng2 - lng1
dlat = lat2 - lat1
a = sin(dlat/2)**2+ cos(lat1)* cos(lat2)* sin(dlon/2)**2
mean_radius_of_earth =6371*1000
distance =2*asin(sqrt(a))* mean_radius_of_earth
return distance/1000
distance_from_longlat_asmath_function(120.12802999999997,30.28708,115.86572000000001,28.7427)
numpy计算坐标两点之间的距
import numpy as np
defdistance_from_longlat_asnumpy_function(lng1,lat1,lng2,lat2,unit='km'):
to_randians =lambda x : np.radians(float(x))
lng1,lat1,lng2,lat2 =map(to_randians,(lng1,lat1,lng2,lat2))
dlon , dlat = lng2 - lng1,lat2-lat1
a = np.sin(dlat/2)**2+ np.cos(lat1)* np.cos(lat2)* np.sin(dlon/2)**2
mean_radius_of_earth =6371*1000
distance =2*np.arcsin(np.sqrt(a))* mean_radius_of_earth
if unit =="km":return distance/1000else:return distance
case_distance = distance_from_longlat_asnumpy_function(120.12802999999997,30.28708,115.86572000000001,28.7427)
case_distance
调用geopy包中的方法
from geopy.distance import geodesic
print(geodesic((30.28708,120.12802999999997),(28.7427,115.86572000000001)).m)#计算两个坐标直线距离print(geodesic((30.28708,120.12802999999997),(28.7427,115.86572000000001)).km)