geopy 获取经纬度计算距离

ak sk, 从百度地图开放平台申请获得 http://lbsyun.baidu.com/index.php?title=webapi

from geopy.geocoders import Nominatim
from geopy.distance import geodesic,great_circle
from urllib import parse
import hashlib, json, requests

def get_urt(address):
queryStr = '/geocoding/v3/?address=%s&output=json&ak=**yourAK**' % address
encodeStr = parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
rawStr = encodeStr + '**yourSK**'
sn = hashlib.md5(parse.quote_plus(rawStr).encode("utf-8")).hexdigest()
url = parse.quote('http://api.map.baidu.com'+queryStr+'&sn='+sn, safe="/:=&?#+!$,;'@()*[]")
# print(url)
return url

'''获取经纬度'''
location_url = get_urt('苏州观前街')
res_location = requests.get(location_url).text
location_js = json.loads(res_location)
lat = location_js['result']['location']['lat']
lon = location_js['result']['location']['lng']
print(lat, lon)

def get_route_matrix(type,origin, destination):
'''
type: walking,riding,motorcycle,driving
tractics:驾车、摩托车可设置,10:不走高速,11:常规路线,12:距离较短(计算耗时考虑路况),13:距离较短(计算耗时不考虑路况)
riding_type:电动车、自行车可设置。0:普通自行车,1:电动自行车
'''
queryStr = '/routematrix/v2/%s?output=json&origins=%s&destinations=%s&ak=GRax38F9QXhSovGubSu6Aen1uEO9MCM8' % \
(type, origin, destination)
url = parse.quote('http://api.map.baidu.com'+queryStr,safe="/:=&?#+!$,;'@()*[]")
return url

'''批量算路,获取到达时间'''
route_url = get_route_matrix('driving','31.318035,120.622065|31.31094,120.582934','32.551671,120.220522|32.531951,120.248576')
res_route = requests.get(route_url).text
print(res_route)
route_js = json.loads(res_route)
route_res = route_js['result']
for i in range(len(route_res)):
print('od'+str(i),route_res[i]['distance']['text'],route_res[i]['duration']['text'])

geolocator = Nominatim(user_agent='geo_test')
location = geolocator.geocode('白米镇,泰州市')
print(location.address)
print(location.latitude, location.longitude)
print(location.raw)

latlon = {"latitude":lat,"longitude":lon}
location1 = geolocator.reverse("%(latitude)s, %(longitude)s"%latlon)
print(location1.address)
print(location1.latitude, location1.longitude)
print(location1.raw)

winson_loc = (41.97772,122.580011)
ivan_loc = (-37.775789,144.941926)
dis_geodesic = geodesic(winson_loc,ivan_loc).miles
print('geodesic: '+str(dis_geodesic))
dis_gCircle = great_circle(winson_loc,ivan_loc).miles
print('great_circle: '+str(dis_gCircle))

posted @ 2020-11-11 15:18  summer7  阅读(398)  评论(0)    收藏  举报