转自每日一Python 微信公众号
最近工作接触到GPS,想计算两个GPS之间的距离,查了一下发现百度地图有提供给开发者各种接口,地址是这个http://lbsyun.baidu.com/,利用自己的百度账号登录,创建应用ak,在调用各个接口时要加上你自己的应用ak;可以看一下开发文档中提供的接口和工具,如图:
我先试了一下“地图生成器”,利用GPS坐标,来生成以它为中心的地图。点击地图生成器会跳转到一个如下一个页面,点击获取代码就可以获取到生成地图的代码,只要输入你自己应用的ak和你想查询的GPS,就可以生成地图啦
另外看了一下服务接口中的“地图调起服务”中的各个接口,主要有
图区功能、搜索功能和信息显示,可以显示地址的全景图、坐标、路线规划等。
我这次主要是想计算两个GPS之间的直线距离和显示全景静态图,所以这边文章就讲一下这个,其余的大家可以看一下百度地图提供的官方接口文档,里面怎么配置参数写的都挺明确的,调用方法也基本都一致;
1.计算两个GPS之间的直线距离的基本是
http://api.map.baidu.com/telematics/v3/distance
参数有waypoint,必填项,可传入两个以上GPS值,之间用 ; 来分开,output,输出的数据格式,选填,默认是xml格式,可选json格式,coord_type,GPS坐标类型,默认是gcj02经纬度坐标;
import pandas as pd
from urllib.request import urlopen
#导入数据,这里计算的直线距离就是坐标1和坐标2之间的
data = pd.read_excel("坐标.xlsx")
data
data['距离'] = None
#在data中新建一列距离,来保存计算的GPS间的距离
def dist(data):
#计算两个坐标之间的距离
startLng = data['坐标1'].apply(lambda x: x.split(',')[1])
#计算坐标1的经度
startLat = data['坐标1'].apply(lambda x: x.split(',')[0]) #计算坐标1的纬度
endLng = data['坐标2'].apply(lambda x: x.split(',')[1]) #计算坐标2的经度
endLat = data['坐标2'].apply(lambda x: x.split(',')[0]) #计算坐标2的纬度
for i in range(0,len(startLng)):
url= "http://api.map.baidu.com/telematics/v3/distance?output=json&ak=你的ak&waypoints="
url = url+startLng[i]+","+startLat[i]+";"+endLng[i]+","+endLat[i]
req = urlopen(url)
data['距离'][i] = eval(req.read())['results'][0]
return data
最终结果如图:
接下来求一个坐标的全景静态图:
import requests
from PIL import Image
from io import BytesIO
url = 'http://api.map.baidu.com/panorama/v2?ak=你的ak&width=512&height=256&fov=360'
url = url + "&location=%s,%s" % ('121.533157','31.622408')
req = requests.get(url)
pic = Image.open(BytesIO(req.content))
pic.show()
结果为
其他的接口调用和这两个类似,配好参数利用requests或者urllib发送请求就可以啦