- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
1、困惑复现
今天利用python和高德地图API对比计算2坐标的距离,发现相差很大,这种异常以前我也遇到过,
以前,我在某点周边500m内检索餐饮企业,获得其坐标,再计算这些餐饮企业与某点的距离时,发现居然大于500m!
2、迷雾散开
经反复试验、思考,逐渐收缩包围圈,最后终于发现---是距离类型搞错了。
高德地图给出的距离有3种:
1、直线距离:type=0
2、驾车距离:type=1
3、步行距离:type=3
显然我要的是直线距离,但默认的是驾车距离!问题就在这。
3、代码精讲
from geopy.distance import geodesic #计算距离的包
import requests #获取网页响应的包
import json #解析json格式的包
web_k='XXXXXXXXXXXXXXXXX' #我的高德地图web开发K码,可免费申请,立等秒取
#以前我把经度写为lon,以后我使用通用写法:经度lng,纬度lat
lat1=30.28718#待计算的2个点
lng1=120.12813
lat2=30.28738
lng2=120.12803
distance=geodesic((lat1,lng1),(lat2,lng2)).m#python提供的距离计算函数
print('GPS坐标2点直线距离=','%.2f' % distance,'m') #输出直线距离
#通过高德API转换坐标:
url='https://restapi.amap.com/v3/assistant/coordinate/convert?key='+\
web_k+'&locations='+str(lng1)+','+str(lat1)+'|'+\
str(lng2)+','+str(lat2)+'&coordsys=gps'
x=json.loads(requests.get(url).text)['locations']
cut=x.split(';')
alng1=cut[0].split(',')[0]#前面加个a代表是amap高德
alat1=cut[0].split(',')[1]
alng2=cut[1].split(',')[0]
alat2=cut[1].split(',')[1]
#通过高德API计算距离:
url='https://restapi.amap.com/v3/distance?'+\
'origins='+str(alng1)+','+str(alat1)+\
'&destination='+str(alng2)+','+str(alat2)+\
'&output=json&key='+web_k+'&type=0'
#直线距离:type=0;驾车距离:type=1;步行距离:type=3
distance=json.loads(requests.get(url).text)['results'][0]['distance']
print('高德坐标2点直线距离=',distance,'m')#高德地图返回的距离是整数
#输出:
#GPS坐标2点直线距离= 24.17 m
#高德坐标2点直线距离= 24 m
可见,python的geodesic()函数求距离可精确到米,符合要求,以后就用它了
|
|