目录

  • 百度地图Web API Python模块

    • 描述
    • 快速开始
    • 调用方法
      • 工厂模式
      • 代理模式
    • 对象
      • JsonLike

        • __init__(json=dict(), **kwargs)
        • __str__()
        • is_list()
        • get_property(p_key, p_default=None)
        • get_properties(p_keys, p_defaults=None)
        • set_property(p_key, p_value)
        • keys()
        • from_json(json, **kwargs)
        • to_json()
      • Location(JsonLike)
        • __str__()
      • BaiduMapObject(JsonLike)
        • from_uid(handle, detail=False)
        • from_address(handle, detail=False)
        • from_location(handle, detail=False)
    • 错误&异常
      • BaiduMapApiException
      • HandleNotExistsError
      • NetError
      • OtherError
    • 运行原理
      • core

        • collector
        • controller
        • status
      • util
        • dict_tool & list_tool
        • url
    • 日志
      • config
    • 附录
      • 部分句柄表

描述


本篇内容基于模块baidumap==1.2.4

百度地图Web API给了开发者们很大的自由发挥空间,百度地图官方提供了C, Java以及Android的开发SDK,但没有提供Python的开发包,本人虽然技术很有限,但是兴趣使然,就开发了第一个Python模块,用来简化百度地图API的调用流程

具体功能有区域检索, 圆形查找, 地点信息, ip定位和路径规划等所有百度地图API功能, 只要用工厂函数生产对应句柄即可

详细的内容参见百度地图开放平台

Github地址: https://github.com/cpak00/baidumap

作者: cpak00@github

邮箱: cymcpak00@gmail.com

快速开始


pip install baidumap

使用pip快速安装,Linux系统请使用pip3

我是Python3的忠实用户,而这个模块牵涉到字符编码的问题,所以Python2应该是无法使用的

下面是一端测试代码,涵盖了这个模块的基本功能
test.py

# -*- coding: utf-8 -*-
# 先导入百度地图开发包
from baidumap import config
from baidumap.api.handle import get_handle
from baidumap.object import BaiduMapObjectimport logging# 获取原始句柄
ak_key = 'ZAMW5**********************'
raw_handler = get_handle(ak_key)# 获取日志记录器
FORMAT = "%(asctime)s %(thread)d %(message)s"
logging.basicConfig(format=FORMAT, datefmt="[%Y-%m-%d %H:%M:%S]")
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)if __name__ == '__main__':# 日志记录配置(不是必要的)config.mode = config.value.DEBUGconfig.logger = logger# 代理模式示例print('---\nAgent Mode:\n')raw_handler = get_handle(ak_key)# 创建一个BaiduMapObject,并给它赋予一个初始值(可以用key=value)# 的模式赋予多个数据thu_main = BaiduMapObject(address='北京市清华大学紫荆园餐厅')# 调用代理函数,从address(地址)获取信息# 代理句柄raw_handler# 这里内部使用的是全球地理逆编码APIthu_main.from_address(raw_handler)# 获取信息后,使用get_property函数获取对象内的参数# 详细获取数据只需要访问百度地图开放平台就可以完全查阅到# get_property可以递归获取参数,无需考虑字典的嵌套print('from address find location: %s' %thu_main.get_property('location')['location'])# get_properties可以同时获取多个参数并组合在一起print('from address find location: %s' % thu_main.get_properties(['lat', 'lng'], p_defaults={'lat': '-1','lng': '-1'}))# 从location(坐标)获取信息thu_main.from_location(raw_handler)print('\nfrom location find uid: %s' % thu_main.get_property('uid'))print('and its name: %s' % thu_main.get_property('name'))find_location = thu_main.get_properties(['uid', 'name'], p_defaults={'uid': '','name': ''})print('--\nfrom location find uid and name: %s' % find_location)# 从uid(唯一编码)获取建筑物(或区域)的详细信息for index in find_location:thu_main.from_json(find_location[index])thu_main.from_uid(raw_handler, detail=True)print('-\nfrom uid find info:\n%s' % thu_main)# 工厂模式示例print('---\nFactory Mode:\n')# 使用工厂函数生产出一个句柄# 句柄的第二个参数是句柄名称# 名称实际上就是API的URL的Path(路径)iplocer = get_handle(ak_key, 'location/ip')# 设置句柄参数iplocer.set_params()# 调用run()会返回一个包含信息的BaiduMapObject对象print(iplocer.run(collect_keys=['address', 'content']).get_property('address')['address'])print('---\n')# 句柄在生产的时候就可以赋予参数# is_list属性必须在生产的赋予# is_list在请求存在页码的时候需要为真placeser = get_handle(ak_key,'place/v2/search',is_list=True,query='ATM机',tag='银行',region='北京', )# run同样有可选参数,分别是每页包含数据条数,最大页数和最大结果数print(placeser.run(page_size=20, max_page_num=1, max_result_num=15).get_property('address'))# 一个复杂的例子# 从地址获取坐标thu_main = BaiduMapObject(address='北京市清华大学紫荆宿舍')thu_main.from_address(raw_handler)thu_location = thu_main.get_property('location')['location']print('---\n\n起始坐标: %s' % (thu_location))# 获取一个句柄用于搜索circleser = get_handle(ak_key,'place/v2/search',is_list=True,query='火车站',scope=2,filter='sort_name:distance|sort_rule:1')circleser.set_params(radius=10000, location=thu_location)nearest_station = circleser.run(max_result_num=5)['results'][0]station_location = nearest_station.get_property('location')['location']print('万米内最近的火车站: %s' % (nearest_station.get_property('name')['name']))# 获取一个用于规划路径的句柄router = get_handle(ak_key, 'direction/v2/transit', is_list=True)router.set_params(origin=thu_location, destination=station_location)result = router.run()station = result.get_properties(['on_station', 'off_station'])print('提取出全部的on_station, off_station属性(地铁站名)')print(station)

调用方法


工厂模式

从工厂函数获取句柄 get_handle

from baidumap.api.handle import get_handle

使用从 百度地图开放平台Web API文档获取的API对应的URL来获取一个句柄的名称


样例

百度地图Web API

行政区划区域检索

http://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行&region=北京&output=json&ak=您的ak //GET请求

这个API的URL是 http://api.map.baidu.com/place/v2/search (结尾有没有/很__重要__)

所以这个句柄的名字就是 place/v2/search(只要移除掉万维网前缀即可)

# ak_key是百度地图开放平台的密钥
# 你需要从以下网址申请('http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5')
ak_key = '********************'# 你可以设置从工厂函数生产句柄的时候设置参数
# (前两个不是参数,分别是ak和句柄名称)
# 把is_list设置为真的时候说明这是一个用于获取列表数据的句柄
place_search = get_handle(ak_key, 'place/v2/search', is_list=True)# 然后设置API所需要的参数
place_search.set_params(query='ATM机', region='北京')# 使用run()来获取结果# 你可以限制max_page_num(=-1 默认不限制), page_size(=10, 上下限由百度规定), max_result_num(=-1 默认不限制) and 请求间隔interval(=0 秒 (过于频繁的请求会被百度拒绝 并且 baidumap.api 会抛出 baidumap.api.exceptions.BaiduMapApiException异常))# place_search.run([max_page_num=-1[, max_result_num=-1[, page_size=10[, interval=0]]]])
atm_in_beijing = place_search.run(max_page_num=3, page_size=20, max_result_num=55, interval=0.5)# 获取结果
print(atm_in_beijing)
# 获取结果中的参数(自动深度搜索,无需关注字典的嵌套问题)
# 结果会返回一个字典
print(atm_in_beijing.get_property('address'))

代理模式

你也可以使用 代理模式

首先import BaiduMapObjectHandle

from baidumap.object import BaiduMapObject
from baidumap.api.handle import Handle

然后使用key=value的键值对(可以是多个)来构建对象

thu_main = BaiduMapObject(address='北京市清华大学紫荆宿舍')

然后你需要创建一个包含ak_key的原始句柄

raw_handle = Handle(ak_key)

最后你只需要调用代理函数代理上面获得的原始句柄就可以让BaiduMapObject获取数据

# 调用地理解码
# 会在对象里填充坐标等信息
thu_main.from_address(handle)# 地理编码调用
# 会填充根据坐标发现的周边建筑的uid和address等信息
# 这样做会返回一个list-like的百度地图对象
thu_main.from_location(handle)# 创建一个带uid的百度地图对象
thu_main = BaiduMapObject(uid=thu_main.get_property('uid')[0].uid)# 详细信息获取
# 从uid填充详细信息
thu_main.from_uid(handle, detail=True)

对象


JsonLike

__init__(json=dict(), **kwargs)

JsonLike对象可以被listdict初始化, 你也可以通过声明**kwargs来替换掉一些参数

__str__()

JsonLike 可以像字典那样被转换为字符串

is_list()

JsonLike对象可能是 dict-likelist-like,取决于初始化它的对象

get_property(p_key, p_default=None)

如果你想获取JsonLike的参数, 推荐这个函数, 返回字典.

如果只有一个结果, 返回像这样的结果:{key: value}

如果有多对结果, 会返回一个包含位置信息的list-like字典

get_properties(p_keys, p_defaults=None)

你可以将多个参数信息包含在一个list-like字典

set_property(p_key, p_value)

你不能用键值对的方式来设置<JsonLike>

如果你用这种方式设置值, 如果p_key不在JsonLike中, 你不会得到任何结果

keys()

返回JsonLike所有的键

from_json(json, **kwargs)

从json数据重构JsonLike,可能是字典 or 列表, 可以使用kwargs 替换部分参数

to_json()

字典形式返回JsonLike

Location(JsonLike)

__str__()

位置对象会被转换成经度,纬度的格式

BaiduMapObject(JsonLike)

from_uid(handle, detail=False)

用uid搜索BaiduMapObject
需要一个带ak密钥的原始句柄

from_address(handle, detail=False)

用地址搜索BaiduMapObject
需要一个带ak密钥的原始句柄

from_location(handle, detail=False)

用坐标搜索BaiduMapObject
需要一个带ak密钥的原始句柄

错误&异常


BaiduMapApiException

基类异常

位置:baidumap.api.exception

HandleNotExistsError

继承BaiduMapApiException

无效的句柄

位置:baidumao.api.exception

NetError

继承BaiduMapApiException

网络错误

位置:baidumao.api.exception

OtherError

继承BaiduMapApiException

无法识别的错误

位置:baidumao.api.exception

运行原理


core

package baidumap.core

collector

controller

status

util

package baidumap.util

dict_tool & list_tool

一些安全操作数组和字典的函数

url

class Url

管理URL地址和参数

使用模块*reque

sts* 来获取GET请求

日志


config

baidumap.config.mode

value description
config.value.DEBUG 运行细节记录
config.value.INFO 重要运行语句
config.value.WARNING 不安全的运行
config.value.ERROR 错误记录
config.value.NONE 不记录

baidumap.config.filename

value description
None 直接打印在控制台
Logger 使用logging模块代理日志

附录


部分句柄名称表

句柄名称 作用 参数&返回值
place/v2/search 地点检索V2 文档
place/v2/detail 地点详情v2 文档
place_abroad/v1/search 国际化地点检索V1 文档
geocoder/v2/ 地理编码V2 文档
direction/v2/transit 路线规划V2 文档
routematrix/v2/driving(walking, riding) 批量算路V2驾车(步行,骑行) 文档
location/ip ip定位 文档

百度地图Web API Python模块相关推荐

  1. 百度地图web API定位不准,定位偏移问题处理

    百度地图浏览器API  获取GPS定位是根据调用浏览器核心获取GPS,部分手机型号定位不准,主要是因为部分手机采用的是GOOGLE  GPS坐标格式.部分手机用的是原生坐标格式 这两种格式百度地图无法 ...

  2. 百度地图web 关键字输入智能提示 省市区限制

    百度地图web api 输入关键字提示仅仅给了一个很简单的demo,而且并未提供任何条件限制的api,今天遇到了个比较难受的问题是,网站本身是省市级3级区域选择,然后后面输入详细地址后要在百度地图上显 ...

  3. python如何爬虫获取图形上点的坐标_python调用百度地图WEB服务API获取地点对应坐标值...

    本篇博客介绍如何使用Python调用百度地图WEB服务API获取地点对应坐标值,现有一系列结构化地址数据(如:北京市海淀区上地十街十号),目的是获取对应坐标值. 百度地图开发者平台路线规划使用说明网址 ...

  4. python调用百度地图实现导航_python调用百度地图WEB服务API获取地点对应坐标值

    本篇博客介绍如何使用Python调用百度地图WEB服务API获取地点对应坐标值,现有一系列结构化地址数据(如:北京市海淀区上地十街十号),目的是获取对应坐标值. 百度地图开发者平台路线规划使用说明网址 ...

  5. 【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件...

    目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET.BMap.NET.WindowsForm以及BMap.NET.WinformDemo. BMap.NET 对百度地 ...

  6. 使用Python调用百度地图的API在地图上添加标记

    写在前面 近期博主工作太忙,快一个月没更新博客.今天跑了大半天的腿,被一堆破事儿弄的无比憋屈,写篇博客调节一下心情. 博主的目的是在地图上做一些标记,然后保存为html网页文件,这样方便我的软件调用, ...

  7. 使用百度地图Web服务API查询地点的经纬度信息

    使用百度地图Web服务API查询地点的经纬度信息 API地理编码服务 数据 结果 API地理编码服务 地理编码服务(又名Geocoder)是一类Web API接口服务: 地理编码服务提供将结构化地址数 ...

  8. 百度地图WEB服务-地点检索API

    百度地图WEB服务-地点检索API 行政区划区域检索 圆形区域检索 矩形区域检索 地点检索服务(又名Place API)是百度地图开放平台提供的Web API接口服务: 该服务提供多种场景的地点(PO ...

  9. 百度地图WEB服务-逆地理编码使用心得

    百度地图WEB服务-逆地理编码使用心得 逆地理编码接口 Postman接口请求测试 POI信息召回 Postman接口请求测试 上一篇博文写了我开发项目中最长用的正地理编码接口的博文,这次想总结一下逆 ...

最新文章

  1. [处理器、单片机]ARM
  2. javase-NIO
  3. 一次“失败”的阿里面试之旅
  4. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体
  5. AD库转换为KiCAD库的方法
  6. cookie、localStorage和sessionStorage三者的异同
  7. Android辅助服务监听dialog,Android开发中对话框辅助类——DialogHelper
  8. Nacos配置管理基础应用
  9. 【C/C++】__stdcall、__cdcel和__fastcall定义与区别
  10. 从零到上亿用户,我是如何一步步优化MySQL数据库的?(建议收藏)
  11. 微信PC端多开的秘密
  12. C++下实现全连接神经网络
  13. awb入门(1).图像的色彩
  14. 常见元素 – a元素
  15. 华为服务器如何开机自动启动不了,华为手机开不了机怎么办 开机后一直停留在开机画面的解决方法(3)...
  16. loadrunner--浏览器不支持或禁止了网页脚本,导致您无法正常登录
  17. Linux入门---基本指令(下)
  18. 拉普拉斯算子——matlab
  19. SPEA 功率半导体测试仪- DOT800T简介
  20. 什么是僵死进程(Zombies)

热门文章

  1. ios 程序发布成ipa 文件 通过 web 下载和安装。install App via OTA
  2. 【Unity3d】Resource文件夹优缺点
  3. CRM 项目实战-笔记
  4. PYTHON开发毕业设计做什么好鸭?
  5. java布道师_我和 Spring 技术布道师的一天
  6. iOS 聊天表情键盘
  7. 怎么用ai做出适量插画_平面插画图文教程,如何用AI制作矢量人像插画
  8. 计算机系表白祖国母亲,青春向祖国告白——“给祖国母亲的一封告白信”活动纪实...
  9. 热心肠行为?苹果“偷偷“给应用买广告
  10. 计算机等级二级等保要求