百度地图开放平台web api 获取某项目方圆一公里的poi信息
百度地图开放平台web api 获取方圆一公里的poi信息
- 背景
- 完整代码
- 代码解读
- 改进思路
- 改进的代码
背景
手里头有集中式公寓的9个项目,并且知道对应的坐标,现在要由这9个项目出发,获取其周边一公里内的小区,地铁站,酒店等信息,仔细分析属于地理检索功能,由已知的地理位置出发,根据距离关系,检索出其周边相关poi点,一般做法有下面两种
- 利用arcgis软件,把这9个项目落点到底图进去,形成一个图层layer,再把小区数据,地铁站数据,酒店数据落点到底图上形成对应的layers, 以项目为圆心,做出9个半径为1公里的圆形缓冲区,把缓冲区里面的小区图层,酒店图层和地铁站图层的目录(directory)都拎出来。
- 利用百度地图开放平台web api接口,调用其地点检索服务,利用其中的圆形区域检索,把9个项目里面的小区,酒店,地铁都检索出来。
本次主要探讨第二个方案
完整代码
# -*- coding: utf-8 -*-
"""
project_name:集中式公寓周边一公里poi点
@author: 帅帅de三叔
Created on Tue Aug 20 11:16:10 2019
"""import pandas as pd #导入数据分析模块
import requests #导入网页请求模块
data=pd.read_excel("集中式公寓项目.xlsx") #读取数据
lat_partion=data["百度纬度"] #纬度
lng_partion=data["百度经度"] #经度
store=data["项目名称"] #门店
targets=[] #用来存要查找的名称
addresss=[] #用来存放地址
stores=[] #用来存放项目名称
distances=[] #用来存放距离def get_directory(keyword,radius): #定义圆形区域检索函数for i in range(len(lat_partion)):location=str(lat_partion[i])+","+ str(lng_partion[i]) #构造圆中心点的经纬度#print(location) #测试try: url="http://api.map.baidu.com/place/v2/search?query="+keyword+"&page_size=10&page_num=0&location="+location+"&radius="+str(radius)+"&output=json&ak=【你的ak】&scope=2"#构造请求网址#print(url) #测试请求接口拼接是否正确,此url可以直接复制到浏览器查看返回结果response=requests.get(url) #发出请求answer=response.json() #返回结果json化#print(answer) #测试print("一共%s条数据"%len(answer['results']))for k in range(len(answer['results'])): target=answer['results'][k]['name'] #标的物名称address=answer['results'][k]['address'] #地址distance=answer['results'][k]['detail_info']['distance'] #距离targets.append(target)addresss.append(address)stores.append(store[i])distances.append(distance)print(target,distance,address)except:print("the circle contains no message")stores.append(store[i])targets.append("")distances.append("")addresss.append("")if __name__=='__main__':keyword=input("please input the keywords:") #输入poi的关键词radius=input("please input the radius:") #输入半径get_directory(keyword,radius) #调用函数get_directorydict={"项目名称":stores,"标的物":targets,"距离":distances,"地址":addresss} #构造字典df=pd.DataFrame(dict)
df.to_excel("检索结果.xlsx")
代码解读
整个流程是当你输入关键词,如“公司”,再输入距离(单位是米),如“1000”,然后调用get_directory()函数,把返回的结果json化,提取里面的公司名称,距离,地址等信息,并追加起来,然后字典化处理形成数据框,最后写入到excel表
从excel表可以看到这个一个1对多的映射关系,比如上海昌林路店这个项目周边一公里就有10个公司,代码的关键是读取原数据,提取经纬度数据,并构造圆中心点的经纬度数据location=str(lat_partion[i])+","+ str(lng_partion[i]) ,然后放到请求地址里面去,利用循环不断请求,不断解析保存。
改进思路
后续发现还需要周边poi的经纬度信息,故需要添加两个字段,一个是经度,一个是纬度,同时在使用try except 的同时会掩盖很多真实情况,以后在写程序的时候会考虑尽量少用这个结构来规避报错。
改进的代码
# -*- coding: utf-8 -*-
"""
project_name:周边一公里poi点检索
@author: 帅帅de三叔
Created on Tue Aug 20 11:16:10 2019
"""
import pandas as pd #导入数据分析模块
import requests #导入网页请求模块
data=pd.read_excel("检索.xlsx") #读取数据
lat_partion=data["百度纬度"] #纬度
lng_partion=data["百度经度"] #经度
center=data["检索中心"] #检索中心
targets=[] #用来存要查找的名称
addresss=[] #用来存放地址
centers=[] #用来检索中心的名称
distances=[] #用来存放距离
lngs=[] #用来存目标放经度
lats=[] #用来存目标放纬度
def get_directory(keyword,radius): #定义圆形区域检索函数for i in range(len(lat_partion)):location=str(lat_partion[i])+","+ str(lng_partion[i]) #构造圆中心点的经纬度print(location) #测试请求url url="http://api.map.baidu.com/place/v2/search?query="+keyword+"&page_size=20&page_num=0&location="+location+"&radius="+str(radius)+"&output=json&ak=rSXLRzPzHMcvSy1V33SNE111wx7UHEYB&scope=2"#构造请求网址#print(url) #测试请求接口拼接是否正确,此url可以直接复制到浏览器查看返回结果response=requests.get(url) #发出请求answer=response.json() #返回结果json化#print(answer) #测试print("一共%s条数据"%len(answer['results']))for k in range(len(answer['results'])): try:target=answer['results'][k]['name'] #标的物名称targets.append(target)except:targets.append("")try:address=answer['results'][k]['address'] #地址addresss.append(address)except:addresss.append("")try:distance=answer['results'][k]['detail_info']['distance'] #距离distances.append(distance)except:distances.append("")try:longitude=answer['results'][k]['location']['lng'] #导航引导点经度lngs.append(longitude)print(longitude)except:lngs.append("")try:latitude=answer['results'][k]['location']['lat'] #导航引导点纬度lats.append(latitude)print(latitude)except:lats.append("") centers.append(center[i])print(center[i],target,longitude,latitude,distance,address) #测试结果 longitude,latitude
if __name__=='__main__':keyword=input("please input the keywords:") #输入poi的关键词radius=input("please input the radius:") #输入半径get_directory(keyword,radius) #调用函数get_directorydict={"中心":centers,"标的物":targets,"百度经度":lngs,"百度纬度":lats,"距离":distances,"地址":addresss} #构造字典df=pd.DataFrame(dict)
df.to_excel("检索结果.xlsx")
如果还有不懂的话可以关注“三行科创”公众号,进交流群一起交流。
延申阅读
百度AI开放平台情感分类
百度地图开放平台web api 获取上海市所有小区信息
百度地图开放平台web api 获取某项目方圆一公里的poi信息相关推荐
- php 百度逆地理编码,百度地图开放平台 Web服务API --Geocoding API (地理编码和逆地理编码)...
百度地图开放平台地理编码服务和逆地理编码服务的api文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geoco ...
- 上手百度地图--开放平台必懂API使用场合(PC端)
本篇整理仅适用与没有接触或对百度地图开放平台API基本没有概念的人 拖拽类 启用地图拖拽 默认启用 enableDragging() 对应的禁止方法 disableDragging( ) 启用地图习惯 ...
- 百度地图开放平台轻量路径规划
百度地图开放平台轻量路径规划 背景 思路 完整代码 代码解读 结果截图 注意事项 背景 由于要做等时圈研究,手头上有一些poi数据,如小区地理位置信息,地铁站点的地理位置信息,想通过等时圈把两者连接起 ...
- 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划
百度地图开放平台路线规划服务是结合实时交通,为用户提供覆盖国内外的路线规划服务.路线规划也是我们用户最常用到的功能之一,比如旅行时需要到达另外一个地方,通过百度地图可以快速规划距离最短路线或耗时最短路 ...
- 百度地图开放平台wgs84,gcj02转bd09
百度地图开放平台wgs84,gcj02转bd09 完整代码 代码解读 参考文献 开局一张图,故事全靠编,上图是上海市257个地铁站bd09坐标和wgs84坐标的差距,可以看到bd09较wgs84往右上 ...
- 如何正确调用百度AI开放平台的API进行图像识别
一.注册一个百度账号 二.点击下方链接使用百度账号登录百度智能云 百度智能云登录地址:https://login.bce.baidu.com/ 三.进入百度智能云个人中心,找到图像识别 四.点击创建图 ...
- 震惊——JS中百度地图开放平台API尽然是这样使用
百度地图js--API使用 基本使用 引用百度API资源 <!--引用资源--> <!--百度地图基础API--> <script type="text/jav ...
- 百度地图开放平台使用教程
为什么要使用百度地图? 百度地图JavaScript API GL 是一套由JavaScript语言编写的应用程序接口,使用了WebGL对地图.覆盖物等进行渲染,支持3D视角展示地图.帮助开发者在网站 ...
- 如何在百度地图开发平台获取开发者Key(AK)
一.搜索百度地图开放平台 二.点进去选择控制台 三.我的应用->创建应用 四. 五. 六.获取开发版SHA1 1.第一步,如果使用的是高版本的android studio ,它会自带jdk,需要 ...
- 百度地图路书(BMapLib.LuShu)------在vue项目中使用原生实现在线和离线地图
前几天vue项目中需要使用百度地图的路数功能制作历史轨迹,为了离线时也可以正常计算路程等,所以这里选择使用原生离线去实现路书 这里放出百度的官方示例:地图JS API示例 | 百度地图开放平台 我先用 ...
最新文章
- 使用jdom.jar心得小结
- Windows安装MongoDB
- 遇到的问题锦集及解决方案
- android系统release签名
- FreeSWITCH中文语音包
- 基于virtualbox安装ubuntu18.04
- STL(1)——查找函数find的使用
- logstash grok插件语法介绍
- android强制结束进程_Android完全强制退出应用程序
- parted如何将磁盘所有空间格式化_linux文件系统及磁盘格式化
- oracle操作字符串:拼接、替换、截取、查找、长度、判断
- 数建--LINGO软件介绍
- Windows批处理(.bat)常用命令教程
- 前端实战:从零到一实现H5拼图小游戏(附源码)
- 微信小程序富文本去除首行缩进样式_小程序富文本处理wxParse
- 50个面试官最喜欢问的java微服务面试题
- 使用SublimeREPL 出现系统找不到指定文件
- 百度apistore第三方登陆
- linux apache 配置文件位置,Apache主配置文件httpd.conf 详解
- oracle 查询调用某一存储过程的job,oracle job 调用存储过程的使用
热门文章
- ABB变频器电路图 ACS510图纸 ACS550原理图 ACS800变频器。pdf格式
- 计算机电子电路原理图,经典六款电路图集锦(图文)
- matlab仿真三相变压器,三相变压器励磁涌流的MATLAB仿真与分析
- 好用又免费的英文校对工具!英文写作就要用Wordvice AI
- 体验中标普华Linux桌面2.0版办公应用秀
- apksigner --> apk签名工具
- swfupload 无法加载_解决 KindEditor SWFUpload 批量上传检测用户登录状态的问题
- 网银打印回单显示服务器不能创建对象,打开应用弹出提示“Activex部件不能创建对象”的解决方法...
- 十六进制 转 二进制方法汇总
- 计算机组装与维护公开课,(最新整理)计算机组装与维护公开课教案