百度地图POI数据获取

2023-05-16

转载自:https://blog.csdn.net/baidu_26646129/article/details/80464447

本文主要介绍百度地图POI数据获取:从百度地图得到POI数据,以json格式保存;
POI数据获取的原理部分还可以参照零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)。

POI数据获取
百度地图POI数据可以从百度地图提供的API——兴趣点坐标获取得到。得到的POI信息包括了名称、经纬度坐标、地址等等,具体的接口使用说明可以参考百度地图WEB服务api说明中的地点检索。

从说明文档我们可以发现,POI数据获取的关键在于构造出合适的url,访问该url便能请求到相应的POI数据。因此,我们先对百度地图WEB服务api中的url进行详细的说明。

http://api.map.baidu.com/place/v2/search?query=银行&bounds=39.915,116.404,39.975,116.414&output=json&ak={您的密钥} //GET请求

以上是百度地图说明文档提供的一个搜索url示例,我们可以将其划分为以下几个部分:

前缀部分:无论进行何种搜索,需要的数据格式如何,请求的url都需要这一部分 
http://api.map.baidu.com/place/v2/search?

参数部分:对请求的数据进行定制,你可以指定特定的关键词、搜索区域、输出类型以及你的ak(access key) 
query=银行&bounds=39.915,116.404,39.975,116.414&output=json&ak={您的密钥}

前缀部分对所有请求都一致不需要过多的说明,而参数部分影响搜索的结果,需要详细说明。由于百度地图提供了三种POI搜索方式,即行政区划区域搜索、周边搜索、矩形区域搜索,但这几种搜索仅仅在一些参数上存在差异,大部分参数都是相同的,返回的结果也是相同的,本文仅以矩形区域搜索请求参数举例说明:


返回参数


需要特别注意的是:

百度地图为了保护数据,单次请求total最多为400,也就是只能搜出400个结果,如果搜索结果大于400个的时候只显示400条记录;
百度地图为非认证开发者提供的配额为2000次请求/每天,并发访问的限制为120。
第一个问题的解决可以通过划分子搜索区域,将需要搜索的矩形区域划分为多个面积更小的矩形区域,将他们的搜索结果进行合并即得到了需要的搜索结果。

第二个问题的解决通过申请多个ak,交替使用,同时减缓请求速度。

最后实现的代码如下:

# -*- coding: utf-8 -*- 
# 第一行必须有,否则报中文字符非ascii码错误

import urllib
import json
import time

#ak需要在百度地图开放平台申请
ak = "XXX"

#关键词
query=["社会福利院"]
page_size=20
page_num=0
scope=1

#范围:
#左下坐标 30.379,114.118
#右上坐标 30.703,114.665
#中间坐标 30.541,114.3915

bounds=[
    [30.379,114.118,30.541,114.3915],
    [30.379,114.3915,30.541,114.665],
    [30.541,114.118,30.703,114.3915],
    [30.541,114.3915,30.703,114.665]
]

new_bounds = []
# col_row 将bounds的每一小块继续细分为3行3列,可以防止区域内的搜索数量上限400
col_row = 3 
for lst in bounds:
    distance_lat = (lst[2] - lst[0])/col_row
    distance_lon = (lst[3] - lst[1])/col_row
    for i in range(col_row):
        for j in range(col_row):
            lst_temp = []
            lst_temp.append(lst[0]+distance_lat*i)
            lst_temp.append(lst[1]+distance_lon*j)
            lst_temp.append(lst[0]+distance_lat*(i+1))
            lst_temp.append(lst[1]+distance_lon*(j+1))
            new_bounds.append(lst_temp)

queryResults = []

for bound in new_bounds:
    np=True
    a=[]
    while np==True:
        #使用百度提供的url拼接条件
        url="http://api.map.baidu.com/place/v2/search?ak="+str(ak)+"&output=json&query="+str(query[0])+"&page_size="+str(page_size)+"&page_num="+str(page_num)+"&bounds="+str(bound[0])+","+str(bound[1])+","+str(bound[2])+","+str(bound[3])

        #请求url读取,创建网页对象
        jsonf=urllib.urlopen(url)
        page_num=page_num+1
        jsonfile=jsonf.read()

        #判断查询翻页进程
        s=json.loads(jsonfile)
        total=int(s["total"])
        a.append(total)

        queryResults.append(s)

        max_page=int(a[0]/page_size)+1
        #防止并发过高,百度地图要求并发小于120
        time.sleep(1) 

        if page_num>max_page:
            np=False
            page_num=0
            print "search complete"
            print "output: "+str(bound)
            print "total: "+str(a[0])
            print ("")

results=open(".\results.txt",'a')
results.write(str(queryResults).decode('unicode_escape'))
results.close()
print "ALL DONE!"

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度地图POI数据获取 的相关文章

  • 2、Oracle PL/SQL字符串分割截取

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 Oracle中的instr和substr函数 Oracle PL SQL中可以通过instr xff08 获取特定字符串的索引 xff09 和subs
  • 4、Oracle PL/SQL编译错误查看与处理

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 在编译Oracle PL SQL函数等时 xff0c 难免会遇到错误 例如 xff1a Function GETSTR1 已编译 Errors che
  • 3、Oracle PL/SQL中Date格式及格式转换

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 Oracle 插入日期 xff08 时间 xff09 时报错 xff1a ORA 01861 文字与格式字符串不匹配 这是由于插入的日期格式和数据库现
  • 5、Oracle数据库insert后获取自增的ID

    该文章是 PL SQL基础 xff08 3 xff09 xff1a 小专题 系列文章之一 在 insert 后使用 select 序列名 CURRVAL from dual 可以获取 insert后自增的ID 具体 SQL 语句 xff1a
  • 解决cmd 中ping>nul语句提示命令符无法识别

    问题描述 xff1a 在批量使用chrome exe ftp data hdf amp ping n10 127 0 0 1 gt nul 下载数据时 xff0c 命令行没有因为ping命令暂停 解决 xff1a 怀疑是ping这部分命令存
  • C#控件限制输入字符数且可用退格

    对于C 控件 xff08 例如textbox xff09 的输入限制长度 xff0c 直接想到的方法是在控件的KeyPress事件时判断控件已有的字符数来限制 假设控件名称为DAForm myBox4 xff0c KeyPress事件简单的
  • XXX事件的重载均与委托"System.EventHandler"不匹配

    在给动态创建控件添加事件时容易遇到的一个错误就是 xff1a XXX事件的重载均与委托 34 System EventHandler 34 不匹配 假设控件是MovePicBox xff0c 使用如下代码添加KeyPress事件 xff0c
  • 外部启动c#窗体程序传参问题

    问题 xff1a 需要在一个软件里启动另一个独立的C 窗体软件并传入参数 xff0c 例如下面的启动语句 string language 61 34 en us 34 System Diagnostics Process Start 34
  • C#控件控制输入文本长度

    C 在控制控件输入文本的长度时要注意两个问题 xff1a 1 传递的事件参数类型要是 KeyPressEventArgs xff1b 2 对退格键 xff08 backspace xff09 做例外处理 xff0c 不然在输入到最大程度时无
  • python打印等腰三角形

    d 61 int input 39 enter an int 39 l 61 39 39 2 d 1 d 初始化列表 for i in range d l i 61 list l i 字符串转列表 x 61 i y 61 0 x 61 d
  • 7、Oracle的;与ORA-00911: invalid character

    写SQL查询 Oracle中的数据时容易遇到一个奇怪的问题 xff1a 在一般的SQL developer查询分析器中写好的SQL语句运行一切正常 xff0c 放到C 写的程序中提交 ORACLE执行就报错 错误代码如下 xff1a ORA
  • C语言变量声明加冒号的用法

    有些信息在存储时 xff0c 并不需要占用一个完整的字节 xff0c 而只需占几个或一个二进制位 例如在存放一个开关量时 xff0c 只有0和1 两种状态 xff0c 用一位二进位即可 为了节省存储空间 xff0c 并使处理简便 xff0c
  • Matlab adjust axis tick labels, limits, and tick locations

    From https cn mathworks com matlabcentral answers 92565 how do i control axis tick labels limits and axes tick locations
  • Matlab 旋转坐标轴标记文本

    在绘图中当X坐标轴标记 xff08 注意不是坐标轴名称的标签 xff09 是文本且较密集的时候我们会希望能够旋转标签以容得下所有内容 xff0c 当Y坐标轴标记是文本时 xff0c 我们也希望文本可以顺着Y轴的方向 这些都需要旋转坐标轴的标
  • Matlab - Extract values from boxplot(从箱图中获取数据)

    From http stackoverflow com questions 9728970 matlab extract values from boxplot How to extract values from built in box
  • matlab写hdf文件(含地理信息文件hdfeos)

    本文介绍matlab写hdf4和hdf5的一些方法 hdf的一些基础信息可以参考 xff1a https sanwen8 cn p 1fcFE9f html 1 matlab写hdf4文件 通常有两种方法 xff1a 1 xff09 mat
  • oracle ORA-01000: maximum open cursors exceeded问题的解决方法

    From http blog csdn net uskystars article details 46679835 项目在运行过程中 xff0c 后台报错 xff1a Java代码 ORA 01000 maximum open curso
  • emgu.cv的图像金字塔操作

    emgu cv里有三个常用的影像金字塔 xff08 重采样 xff0c 每一级倍数2 xff09 函数 xff1a 1 BuildPyramid int maxLevel 建立多级影像金字塔 C 例子 xff1a Int maxLevel
  • ENVI栅格裸数据生成shp和kml矢量文件

    ENVI栅格裸数据生成shp和kml矢量文件 生成kml文件需要用到ArcMap xff0c 但是ArcMap不能直接加载ENVI裸数据 xff0c 需要在ENVI里将栅格数据转为shp或另存为ArcViewRaster 前者生成kml文件
  • 笔记:刘未鹏思考的技术与艺术(原“学会思考”)

    在读 暗时间 这本书的时候了解到刘未鹏 xff0c 也了解到关于心理学 学会思考 的豆列 xff0c 推荐的书很棒 xff0c 体系也很完善 xff0c 特作记录 豆列的地址在 xff1a https www douban com doul

随机推荐