地图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()

 

### 关于高德地图API的使用 #### 获取并使用API Key 在利用高德地图的各种API前,获取一个有效的Key至关重要。此Key将在加载地图时被指定使用[^1]。 #### 前端集成实 对于前端开发者来说,可以直接从高德地图API中心选取所需的地图展示样式及其配套JavaScript框架代码片段,并依据提供的示与手册指导完成具体的功能开发工作,比如调用不同类型的API方法等操作。 ```html <script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您的KEY"></script> <div id="container" style="width:600px;height:500px;"></div> <script type="text/javascript"> var map = new AMap.Map('container', { zoom: 10, center: [116.397428, 39.90923] }); </script> ``` #### PHP环境下的POI搜索 针对服务器端编程语言如PHP而言,可以借助HTTP请求发送机制向高德地图发起POI(兴趣点)查询请求,进而解析返回的数据结构以满足业务逻辑需求[^2]。 ```php <?php $keyword = urlencode("餐厅"); $key = "您申请的应用程序Key"; $url = "http://restapi.amap.com/v3/place/text?keywords={$keyword}&types=&city=%E5%8C%97%E4%BA%AC&output=json&offset=20&page=1&key={$key}"; $response = file_get_contents($url); $data = json_decode($response, true); if ($data['status'] == '1') { foreach ($data['pois'] as $poi) { echo "{$poi['name']} 地址:{$poi['address']}<br>"; } } else { echo "Error occurred."; } ?> ``` #### Java环境中地理编码应用 当采用Java作为开发工具时,则可以通过构建HttpClient对象或者运用其他网络库执行GET/POST请求至特定URL地址来实现诸如地理位置转码等功能;同时需要注意处理好异常情况以及合理设置超时参数等方面的内容[^3]。 ```java import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class GeoCoderExample { public static void main(String[] args)throws Exception{ String key = "您自己的Key"; // 替换成自己申请的Key CloseableHttpClient httpClient = HttpClients.createDefault(); try { HttpGet httpget = new HttpGet( "http://restapi.amap.com/v3/geocode/geo?key="+key+"&address=北京市朝阳区阜通东大街6号"); HttpResponse response = httpClient.execute(httpget); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null){ result.append(line); } System.out.println(result.toString()); } finally { httpClient.close(); } } } ``` #### Android平台上的SDK部署 面向移动设备应用程序开发人员,在Android平台上集成本地化服务同样离不开对官方发布的SDK包的支持——下载对应版本之后按照指示添加依赖项、声明权限节点等一系列准备工作必不可少[^4]。 ```gradle dependencies { implementation files('libs/amap_api_v2.jar') } // 在 AndroidManifest.xml 中配置 API Key 和必要权限 <meta-data android:name="com.amap.api.v2.apikey" android:value="您的API_KEY"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LionelMessi7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值