地图Web服务API接口——搜索POI(以高德地图为例)

依据关键字(keywords)、POI类型(types)等信息批量获取目标点位经纬度坐标。

1.原理

借助接口,用户不必关心获取数据方法的细节,而只需要提供几个重要的参数即可获得想要的数据。

高德地图Web服务API指南:https://lbs.amap.com/api/webservice/gettingstarted

2.GET方法

API接口采用GET方法(当然还有其他访问方法),GET方法的结构如下:

3.举例

下面代码表示以“故宫”为关键词,获取返回数据中坐标位置。

import requests
import re

path = "https://restapi.amap.com/v3/place/text?s=rsv3&children=&key=8325164e247e15eea68b59e89200988b&page=1&offset=10&city=110000&language=zh_cn&callback=jsonp_265615_&platform=JS&logversion=2.0&sdkversion=1.3&appname=https%3A%2F%2Flbs.amap.com%2Fconsole%2Fshow%2Fpicker&csid=4A86155F-6120-4112-B48E-0DE19C219DAC&keywords=故宫"

headers = {
        "User-Agent": r"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    }
res = requests.get(path, headers=headers)
p = re.findall('"location":"(.*?)","tel"', res.text)
print(p[0])

注:1.path中的URL高德地图API提供,key为用户申请,其他参数可参照表格,也可根据页面提供的生成器生成。

        2.返回的数据,我们可以通过浏览器输入path查看,从数据中可以看到,坐标数据是紧跟“loaction :”字段后面的,所以利用re库的findall函数,匹配出需要的坐标数据,返回的内容可能存在多个匹配结果,所以是以list的形式返回。p[0]表示第一个匹配的坐标。

下图为通过用户自定参数而生成的访问路径(path)

https://lbs.amap.com/api/webservice/guide/api/search

参数名

含义

规则说明

是否必须

缺省值

key

请求服务权限标识

用户在高德地图官网申请Web服务API类型KEY

必填

keywords

查询关键字

规则: 多个关键字用“|”分割 若不指定city,并且搜索的为泛词(例如“美食”)的情况下,返回的内容为城市列表以及此城市内有多少结果符合要求。

必填

types

查询POI类型

若指定了某个大类,则所属的中类、小类都会被显示。

必填

city

查询城市

可选值:城市中文、中文全拼、citycode、adcode

如:北京/beijing/010/110000

 

可选

citycitylimit

仅返回指定城市数据

可选值:true/false

可选

false

children

是否按照层级展示子POI数据

可选值:children=1

当为0的时候,子POI都会显示。

当为1的时候,子POI会归类到父POI之中。

 

仅在extensions=all的时候生效

 

可选

0

offset

每页记录数据

强烈建议不超过25,若超过25可能造成访问报错

可选

20

page

当前页数

最大翻页数100

可选

1

extensions

返回结果控制

此项默认返回基本地址信息;取值为all返回地址信息、附近POI、道路以及道路交叉口信息。

可选

base

sig

数字签名

数字签名获取和使用方法

可选

output

返回数据格式类型

可选值:JSON,XML

可选

 

callback

回调函数

callback值是用户定义的函数名称,此参数只在output=JSON时有效

可选

4.批量获取

熟悉API接口,即可根据需求批量获取POI数据。

import re
import requests

#按名字获取POI
def main():
    count = 1
    path1 = "http://restapi.amap.com/v3/place/text?                    
    key=8325164e247e15eea68b59e89200988b&keywords="
    path2=  "&city="
    headers = {
        "User-Agent": r"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    }
    with open(r'C:\Users\admin\Desktop\data.txt',encoding='utf-8')as f:
        with open(r'C:\Users\admin\Desktop\city_poi.txt','w',encoding='utf-8')as f_w:
            for i in f:
                i = i.split(',')
                path_i = path1 + i[1]+i[2]+'政府'+path2+i[3]
                res = requests.get(path_i, headers=headers)
                p = re.findall('"location":"(.*?)","tel"', res.text)
        
                if p :
                    f_w.write(p[0] + '\n')
                else:
                    f_w.write('no data......'+'\n')
                count += 1

if __name__ == '__main__':
    main()

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LionelMessi7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值