百度地图开放平台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信息相关推荐

  1. php 百度逆地理编码,百度地图开放平台 Web服务API --Geocoding API (地理编码和逆地理编码)...

    百度地图开放平台地理编码服务和逆地理编码服务的api文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geoco ...

  2. 上手百度地图--开放平台必懂API使用场合(PC端)

    本篇整理仅适用与没有接触或对百度地图开放平台API基本没有概念的人 拖拽类 启用地图拖拽 默认启用 enableDragging() 对应的禁止方法 disableDragging( ) 启用地图习惯 ...

  3. 百度地图开放平台轻量路径规划

    百度地图开放平台轻量路径规划 背景 思路 完整代码 代码解读 结果截图 注意事项 背景 由于要做等时圈研究,手头上有一些poi数据,如小区地理位置信息,地铁站点的地理位置信息,想通过等时圈把两者连接起 ...

  4. 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划

    百度地图开放平台路线规划服务是结合实时交通,为用户提供覆盖国内外的路线规划服务.路线规划也是我们用户最常用到的功能之一,比如旅行时需要到达另外一个地方,通过百度地图可以快速规划距离最短路线或耗时最短路 ...

  5. 百度地图开放平台wgs84,gcj02转bd09

    百度地图开放平台wgs84,gcj02转bd09 完整代码 代码解读 参考文献 开局一张图,故事全靠编,上图是上海市257个地铁站bd09坐标和wgs84坐标的差距,可以看到bd09较wgs84往右上 ...

  6. 如何正确调用百度AI开放平台的API进行图像识别

    一.注册一个百度账号 二.点击下方链接使用百度账号登录百度智能云 百度智能云登录地址:https://login.bce.baidu.com/ 三.进入百度智能云个人中心,找到图像识别 四.点击创建图 ...

  7. 震惊——JS中百度地图开放平台API尽然是这样使用

    百度地图js--API使用 基本使用 引用百度API资源 <!--引用资源--> <!--百度地图基础API--> <script type="text/jav ...

  8. 百度地图开放平台使用教程

    为什么要使用百度地图? 百度地图JavaScript API GL 是一套由JavaScript语言编写的应用程序接口,使用了WebGL对地图.覆盖物等进行渲染,支持3D视角展示地图.帮助开发者在网站 ...

  9. 如何在百度地图开发平台获取开发者Key(AK)

    一.搜索百度地图开放平台 二.点进去选择控制台 三.我的应用->创建应用 四. 五. 六.获取开发版SHA1 1.第一步,如果使用的是高版本的android studio ,它会自带jdk,需要 ...

  10. 百度地图路书(BMapLib.LuShu)------在vue项目中使用原生实现在线和离线地图

    前几天vue项目中需要使用百度地图的路数功能制作历史轨迹,为了离线时也可以正常计算路程等,所以这里选择使用原生离线去实现路书 这里放出百度的官方示例:地图JS API示例 | 百度地图开放平台 我先用 ...

最新文章

  1. 使用jdom.jar心得小结
  2. Windows安装MongoDB
  3. 遇到的问题锦集及解决方案
  4. android系统release签名
  5. FreeSWITCH中文语音包
  6. 基于virtualbox安装ubuntu18.04
  7. STL(1)——查找函数find的使用
  8. logstash grok插件语法介绍
  9. android强制结束进程_Android完全强制退出应用程序
  10. parted如何将磁盘所有空间格式化_linux文件系统及磁盘格式化
  11. oracle操作字符串:拼接、替换、截取、查找、长度、判断
  12. 数建--LINGO软件介绍
  13. Windows批处理(.bat)常用命令教程
  14. 前端实战:从零到一实现H5拼图小游戏(附源码)
  15. 微信小程序富文本去除首行缩进样式_小程序富文本处理wxParse
  16. 50个面试官最喜欢问的java微服务面试题
  17. 使用SublimeREPL 出现系统找不到指定文件
  18. 百度apistore第三方登陆
  19. linux apache 配置文件位置,Apache主配置文件httpd.conf 详解
  20. oracle 查询调用某一存储过程的job,oracle job 调用存储过程的使用

热门文章

  1. ABB变频器电路图 ACS510图纸 ACS550原理图 ACS800变频器。pdf格式
  2. 计算机电子电路原理图,经典六款电路图集锦(图文)
  3. matlab仿真三相变压器,三相变压器励磁涌流的MATLAB仿真与分析
  4. 好用又免费的英文校对工具!英文写作就要用Wordvice AI
  5. 体验中标普华Linux桌面2.0版办公应用秀
  6. apksigner --> apk签名工具
  7. swfupload 无法加载_解决 KindEditor SWFUpload 批量上传检测用户登录状态的问题
  8. 网银打印回单显示服务器不能创建对象,打开应用弹出提示“Activex部件不能创建对象”的解决方法...
  9. 十六进制 转 二进制方法汇总
  10. 计算机组装与维护公开课,(最新整理)计算机组装与维护公开课教案