python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)

ad125c9e39384af1b76b609a964a82b4.jpg


文章目录

前言

一、IP定位

1.请求URL

2.获取IP定位封装函数

3.输出结果

二、国内天气查询

1.请求url

2.天气查询封装函数

3.输出结果

三、行政区划区域检索

1.请求url

2.区域检索封装函数

3.输出结果

四、地理编码

1.请求url

2.地理编码封装函数

3.输出结果

五、坐标转换

1.请求url

2.坐标转换封装函数

3.输出结果

总结


前言

百度地图Web服务API,为开发者提供http/https接口,即开发者通过http/https形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。


在地理信息数据可视化(web GIS)的开发时,地点检索、地理编码、国内天气查询、IP定位、坐标转换等服务是比较常见的应用服务。


一、IP定位

IP定位是一套以HTTP/HTTPS形式提供的轻量级定位接口,用户可以通过该服务,根据IP定位来获取大致位置。


利用IP获取大致位置,调用API接口,返回请求参数中指定上网IP的大致位置信息(一般为城市级别),位置信息包括:经纬度、省、市等地址信息。

如果请求参数中未指定上网IP,则默认返回当前服务请求来源的IP所对应的大致位置信息。

注意:该服务所返回的经纬度信息只是一个大概的位置,一般为城市中心点。

1.请求URL

https://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll 

2.获取IP定位封装函数

import requests
'''
ak, 开发者密钥
ip,用户上网的IP地址,请求中如果不出现或为空,会针对发来请求的IP进行定位,IPV6需要提交工单申请
coor,设置返回位置信息中,经纬度的坐标类型
'''
def get_ip_city(ak, ip, coor):
    url = 'https://api.map.baidu.com/location/ip?ak={}&ip={}&coor={}'.format(ak, ip, coor)
    if ak == "":
        print('百度key不能为空')
    else:
        resp = requests.get(url=url)
        r = resp.json()  # 输出字典格式
        # print(r)  # 全部数据
        if r['status'] == 0:
            print("城市:" + r['content']['address_detail']['city'])
            print("经度:" + r['content']['point']['x'])
            print("纬度:" + r['content']['point']['y'])
        else:
            print(r['message'])  # 百度ak报错提示信息

3.输出结果



二、国内天气查询

国内天气查询服务是一套REST风格的Web服务API,以HTTP形式提供了实时和未来天气查询服务。在基础服务中,用户可通过行政区划代码查询实时天气信息及未来5天天气预报。

1.请求url

https://api.map.baidu.com/weather/v1/?district_id=222405&data_type=all&ak=你的ak  //GET请求

2.天气查询封装函数

'''
ak, 开发者密钥,同时必须具备查询天气的权限(一般为服务器端)
district_id,区县的行政区划编码,百度开发平台提供对应的id信息
data_type,请求数据类型。数据类型有:now/fc/index/alert/fc_hour/all,控制返回内容
'''
def get_weather(ak, district_id="330100", data_type="now"):
    url = 'https://api.map.baidu.com/weather/v1/?district_id={}&data_type={}&ak={}'.format(district_id, data_type, ak)
    if ak == "":
        print('百度key不能为空')
    else:
        resp = requests.get(url=url)
        r = resp.json()  # 输出字典格式
        print(r)  # 全部数据
        if r['status'] == 0:
            print("adcode:" + r['result']['location']['id'])
            print("城市:" + r['result']['location']['city'])
            print("天气:" + r['result']['now']['text'])
            print("温度:" + str(r['result']['now']['temp']) + "°C")
            print("风力:" + r['result']['now']['wind_class'])
            print("风向:" + r['result']['now']['wind_dir'])
        else:
            print(r['message'])  # 百度ak报错提示信息

3.输出结果



三、行政区划区域检索

地点检索服务(又名Place API)是一类Web API接口服务,通过该功能,检索某一行政区划内(目前最细到城市级别)的地点信息。

在实际开发应用中,该接口是最为广泛,也是比较有实用价值的API开发。由于百度地图限额,最多获取400条记录,无法满足需求的情况下,也激发了众多开发者不断通过“多边形区域检索”功能来尽可能爬取多记录热情。

1.请求url

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

2.区域检索封装函数

'''
ak, 开发者密钥
query,检索关键字。行政区划区域检索不支持多关键字检索。如果需要按POI分类进行检索,请将分类通过query参数进行设置,如query=美食
region,检索行政区划区域(增加区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用city_limit参数),可输入行政区划名或对应cityCode
'''
def get_place(ak, query, region):
    url = 'https://api.map.baidu.com/place/v2/search?query={}&region={}&output=json&ak={}'.format(query, region, ak)
    if ak == "":
        print('百度key不能为空')
    else:
        resp = requests.get(url=url)
        r = resp.json()  # 输出字典格式
        # print(r)  # 全部数据
        if r['status'] == 0:
            # 格式化输出
            results = r['results']  # 列表类型
            # print(len(results))
            for item in results:
                print("名称:" + item['name'])
                print("地址:" + item['address'])
                print("电话:" + item['telephone'])
                print("经度:" + str(item['location']['lat']))
                print("纬度:" + str(item['location']['lng']))
                print("---")
        else:
            print(r['message'])  # 百度ak报错提示信息

3.输出结果



四、地理编码

地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;用户可通过该功能,将结构化地址(省/市/区/街道/门牌号)解析为对应的位置坐标。地址结构越完整,地址内容越准确,解析的坐标精度越高。

1.请求url

https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求

2.地理编码封装函数

'''
ak, 开发者密钥
address:
1、标准的结构化地址信息,如北京市海淀区上地十街十号 【推荐,地址结构越完整,解析精度越高】
2、支持“*路与*路交叉口”描述方式,如北一环路和阜阳路的交叉路口
city,地址所在的城市名。用于指定上述地址所在的城市,当多个城市都有上述地址时,该参数起到过滤作用,但不限制坐标召回城市。
'''
def get_geocoding(ak, address):
    url = 'https://api.map.baidu.com/geocoding/v3/?address={}&output=json&ak={}'.format(address, ak)
    if ak == "":
        print('百度key不能为空')
    else:
        resp = requests.get(url=url)
        r = resp.json()  # 输出字典格式
        print(r)  # 全部数据
        if r['status'] == 0:
            # 格式化输出
            print("经度:" + str(r['result']['location']['lng']))
            print("纬度:" + str(r['result']['location']['lat']))
        else:
            print(r['message'])  # 百度ak报错提示信息

3.输出结果



五、坐标转换

坐标转换服务是用于将常用的非百度坐标转换成百度地图中使用的坐标,并可将转化后的坐标在百度地图JavaScript API、Web服务API等产品中使用。

用户可通过该服务,实现非百度坐标系(GPS标准坐标、amap地图坐标、tencent地图坐标、mapbar地图坐标等)到百度坐标系的转换。

1.请求url

https://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥 //GET请求

2.坐标转换封装函数

'''
ak, 开发者密钥
from_type:
源坐标类型:
1:GPS标准坐标;
2:搜狗地图坐标;
3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标;
4:3中列举的地图坐标对应的墨卡托平面坐标;
5:百度地图采用的经纬度坐标(bd09ll);
6:百度地图采用的墨卡托平面坐标(bd09mc);
7:图吧地图坐标;
8:51地图坐标;
to_type:
目标坐标类型:
3:火星坐标(gcj02),即高德地图、腾讯地图及MapABC等地图使用的坐标;
5:百度地图采用的经纬度坐标(bd09ll);
6:百度地图采用的墨卡托平面坐标(bd09mc);
'''
def get_geoconv(ak, coords, from_type='1', to_type='5'):
    url = 'https://api.map.baidu.com/geoconv/v1/?coords={}&from={}&to={}&ak={}'.format(coords, from_type, to_type, ak)
    if ak == "":
        print('百度key不能为空')
    else:
        resp = requests.get(url=url)
        r = resp.json()  # 输出字典格式
        print(r['result'][0])  # 全部数据
        if r['status'] == 0:
            # 格式化输出
            print("经度:" + str(r['result'][0]['x']))
            print("纬度:" + str(r['result'][0]['y']))
        else:
            print(r['message'])  # 百度ak报错提示信息

3.输出结果



总结

百度地图web 服务API中,全景静态图、路线规划服务、轨迹纠偏服务、批量算路服务、推荐上车点服务等也是在实际应用开发中经常遇见的场景,但是对于小型的公司来说,使用机会较少,故不作案例展示。


百度地图Web服务API,仅从requests的爬取入手,实现爬取,类型判断和按需字段输入;

在实际项目开发中,可以将获取的数据信息,输出到记事本、excle或者mysql数据库中;

更多的用途是在web中使用,从获取→转换格式→数据清洗或过滤→数据展示的过程进行使用。@漏刻有时


相关文章
|
23天前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
23 6
【RF案例】Web自动化测试弹窗处理
|
24天前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`<select>` 和 `<option>`)、文本域(`<textarea>`)、标签解释(`<label>`)、各类按钮(`<button>`)及表单重置功能、无语义布局标签(`<div>` 和 `<span>`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
11天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
37 4
|
13天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
39 6
|
9天前
|
存储 Python
深度剖析:Python里字典树Trie的构建与查询,让你的代码更优雅!
在编程的世界里,数据结构的选择往往直接决定了程序的效率和可读性。今天,我们将深入探索一种高效处理字符串搜索与匹配的数据结构——字典树(Trie),也称作前缀树或单词查找树。通过Python实现Trie树,我们将看到它如何优雅地解决一系列字符串相关的问题,并提升代码的整体质量。
13 2
|
14天前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
28 1
|
23天前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
30 11
|
23天前
|
前端开发
前端web入门第四天】03 显示模式+综合案例热词与banner效果
本文档介绍了HTML中标签的三种显示模式:块级元素、行内元素与行内块元素,并详细解释了各自的特性和应用场景。块级元素独占一行,宽度默认为父级100%,可设置宽高;行内元素在同一行显示,尺寸由内容决定,设置宽高无效;行内块元素在同一行显示,尺寸由内容决定,可设置宽高。此外,还提供了两个综合案例,包括热词展示和banner效果实现,帮助读者更好地理解和应用这些显示模式。
|
26天前
|
JavaScript 前端开发
【前端web入门第一天】03 综合案例 个人简介与vue简介
该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
|
23天前
|
存储 负载均衡 Java
Jetty技术深度解析及其在Java中的实战应用
【9月更文挑战第3天】Jetty,作为一款开源的、轻量级、高性能的Java Web服务器和Servlet容器,自1995年问世以来,凭借其卓越的性能、灵活的配置和丰富的扩展功能,在Java Web应用开发中占据了举足轻重的地位。本文将详细介绍Jetty的背景、核心功能点以及在Java中的实战应用,帮助开发者更好地理解和利用Jetty构建高效、可靠的Web服务。
32 2
下一篇
无影云桌面