使用高德开放平台API获取POI位置和路线信息

借助地图API接口,帮助我们快速获取大量的静态、动态数据是非常有效的。 这次我就来讲讲怎么利用高德开发平台API接口,获取一些设施位置和路径规划信息。

高德开放平台

高德开放平台可以让你自己开发的应用嵌入高德服务,使用高德在地理信息服务上的贡献。 因为这次我主要需要用到的是一些信息搜索,所以用的是开发支持->Web服务->Web服务API,其他需要移动应用开发的可以去查询开发支持下的Web端、Andriod平台、IOS平台、微信小程序等等。

web_API_intro.PNG

如平台的简介,它可以帮你实现搜索、路径规划、行驶距离测量等功能。

1. 准备工作

申请一个高德的适用于Web服务的key,之后在URL里需要填上自己的key。注意个人用户每日每个key的使用次数是有限额的,超限了查询信息返回会报错,但一个人可以申请好多个。

key.PNG

2. 根据需要填充URL关键字

我们这次用关键字搜索功能,来查询POI(point of interest)信息,以查询某一城市的机场、火车站的枢纽地理信息为例。 根据开发文档提供的URL示例:https://restapi.amap.com/v3/place/text?parameters 我们把parameters替换为搜索时限定的一些关键词,并且用&连接不同的条件,记得替换你自己申请的key。 比如:https://restapi.amap.com/v3/place/text?keywords=火车站&city=北京&citylimit=true&extensions=all&key=你申请的key&offset=20&page=1

keywords_search.PNG

返回的结果,也是参照开发文档,注意弄清层级结构,即可获取对应信息,默认返回json格式。

result_parameter.PNG

我这里会主要想要获取经纬度信息,在['pois']->['poi']->['location']下面。

3. 使用python批量访问获取结果

用python的requests库,获取访问结果,完整代码如下。这里用简单的GET方式填充URL的参数即可,以后自己爬其他的信息还有可能要用到POST方式,但以字典方式传送参数也是一样的。

import requests
import math
import json
import pandas as pd

def get_station(city,type):  # 抓取场站信息
    url1 = "https://restapi.amap.com/v3/place/text?keywords=%s&city=%s&citylimit=true&extensions=all&key=你自己申请的key&offset=20&page=%d"%(type,city,1)#查询机场和火车站的经纬度信息
    req = requests.get(url1)  # 请求高德地图Place API返回数据
    content = req.content
    data = json.loads(content)  # 将获取的信息封装为字典
    num=int(data['count'])  # 提取场站总数
    result = data['pois']  # 提取字典中的有效信息
    print(num)

    infoDf = pd.DataFrame(columns=['名称', '经度', '纬度', '城市', '类型', '别名'])
    if num==0:#返回有数据的情况下
        print('%s无%s'%(city,type))

    #第一次的信息别浪费了
    for i in range(len(result)):
        print(i)
        str_temp = result[i]  # 保存总数到链表第一个元素
        if len(str_temp['alias']) == 0:
            alias = ''
        else:
            alias = str_temp['alias']

        print(str_temp['name'],str_temp['location'].split(',')[0],str_temp['location'].split(',')[1],str_temp['cityname'],alias)
        singleinfo={'名称':str_temp['name'],'经度':str_temp['location'].split(',')[0],'纬度':str_temp['location'].split(',')[1],'城市':str_temp['cityname'],'类型':type,'别名':alias}
        singleinfoDf=pd.DataFrame(singleinfo,columns=['名称', '经度', '纬度', '城市','类型','别名'],index = [0])
        infoDf = pd.concat([infoDf, singleinfoDf], axis=0, ignore_index=True)

    totalpage=math.ceil(num/20)#每一页显示20条数据,算好页数
    if totalpage >1 :
        for n in range(2,totalpage+1):#从第2页起
            url2 = "https://restapi.amap.com/v3/place/text?keywords=%s&city=%s&citylimit=true&extensions=all&key=e3bc4d79724c51578f54e141d4085394&offset=20&page=%d"%(type,city,n)#查询机场和火车站的经纬度信息
            req = requests.get(url2)  # 请求高德地图Place API返回数据
            content = req.content
            data = json.loads(content)  # 将获取的信息封装为字典
            result = data['pois']  # 提取字典中的有效信息
            for i in range(len(result)):
                print(i)
                str_temp = result[i]  # 保存总数到链表第一个元素
                if len(str_temp['alias'])==0:
                    alias=''
                else:
                    alias=str_temp['alias']
                singleinfo = {'名称': str_temp['name'], '经度': str_temp['location'].split(',')[0],
                              '纬度': str_temp['location'].split(',')[1], '城市': str_temp['cityname'],'类型':type, '别名': alias}
                singleinfoDf = pd.DataFrame(singleinfo,columns=['名称', '经度', '纬度', '城市','类型','别名'],index = [0])
                infoDf = pd.concat([infoDf,singleinfoDf],axis=0,ignore_index=True)

    return infoDf

def run():  # 开始抓取文件
    citylist=['石家庄','唐山','邯郸','保定','沧州','邢台','廊坊','承德','张家口','衡水','秦皇岛']#,'张家口','衡水','秦皇岛'
    typelist=['机场','火车站']
    whole_info = pd.DataFrame(columns=['名称', '经度', '纬度', '城市','类型','别名'])
    for cityname in citylist:
        for type in typelist:
            info = get_station(cityname,type)
            whole_info=  pd.concat([whole_info,info],axis=0,ignore_index=True)

    whole_info.to_csv('/京津冀机场火车站信息.csv',index=False,encoding='utf_8_sig')

if __name__ == '__main__':
    run()

类似地,大家可以参照以上代码,去查询一下餐厅、公交站等其他设施的信息。

*获取路径规划信息

刚才是介绍如何用关键字搜索功能,进行一些POI点的信息查询。现在做一些稍微复杂一点点的更深入的查询。 查询两个点之间的不同交通方式的路径规划信息,比如驾车路线、耗时、距离,公交的路线、耗时、花费等。 此时查询路径规划的对应开发文档。

route_planning.PNG

总结

  • 高德开发平台API会在查询一些信息时,起到很大帮助(百度开放平台API也是有相似的功能)。重点要去研读一下他们提供的开发文档,并且知道URL的组成,这样你就可以个性化的获取你想要的信息了。
  • 更多的内容,还是需要自己去不断发掘。
打赏
  • © 2020-2022 Eva Ren
  • Powered by Hexo Theme Ayer
    • 本站总访问量
    • 本页面总访问量
  • 载入运行时间...

请我喝杯咖啡吧~

支付宝
微信