一.基于第三方应用库的实现
(1)安装现有的库geopy库
直接在cmd中使用pip命令安装geopy库
1. 注册并登录百度地图开放平台->选择控制台->选择【我的应用】->点击【创建应用】
2.本实验要调用api地图可视化,因此创建时选择浏览器端;此外,不对任何域名做限制,白名单填写*
3. 申请成功,可复制使用
(3)调用geopy库实现地理位置编码功能
正地址编码:
源代码:
运行结果:
逆地址编码:
源代码:
运行结果:
总结:
相较于书上的代码,书上直接使用的是Geocoder中的参数设置代理,若要使用申请的ak,必须要实例化,不能像书上一样直接print。
相较于老师给出的代码,可以添加“if __name__==’__name__’:” ,有简单的区别:当.py文件被直接运行时,“if __name__==’__name__’:”之下的代码块将被运行;当.py文件以模块形式被导入时,“if __name__==’__name__’:”之下的代码块不被运行。
逆地址编码时使用自己的ak,需要修改baidu.py文档。
补充:geographiclib库的作用:用于在地理,UTM,UPS,MGRS,地心和本地笛卡尔坐标之间执行转换,以进行重力(例如EGM2008),大地水准面高度和地磁场(例如WMM2020)的计算,以及 解决测地线问题。
二.基于requests库的实现
(1)原理:导入requests库->参数解析->构造URL,提交请求->解析返回结果;需从百度地图Web服务API中的正逆地址编码的服务文档中了解相关参数意义,并构造URL。
(2)导入requests库实现地理编码
正地址编码:
源代码:
运行结果:
逆地址编码:
源代码:
运行结果:
总结:
要按照百度地图服务文档的格式进行参数解析(address=’’&output=json&ak=ak&callback=showLocation),否则运行会出错。
补充:output的输出格式是json或xml(是默认的格式)。JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。Python 数据结构转换为json对象:json 模块提供了一种简单的方式来编码和解码json数据,常用的有json.jumps() , json.loads()。
三.基于http.client的实现
(1)原理:请求连接特定的主机->手动构造一个带path的GET查询->从http连接读取响应结果。
(2)使用原始HTTP实现地理编码
正地址编码:
源代码:
运行结果:
两种格式实现地址的输出,点开网站链接同样可以获得地理编码。
逆地址编码:
源代码:
运行结果:
总结:
通过字符串格式化的方式构造URL,且URL中通过?将前部分和后部分隔开。此外,进行逆地址编码时,一定要注意base是reverse_geocoding,否则会报错。
四.基于套接字的实现
正地址编码:
源代码:
运行结果:
逆地址编码:
源代码:
运行结果:
总结:
此题遇到第一个问题,message:APP服务被禁用——解决办法:检查自己写的路径中使用的版本,自己是新用户应该使用V3版本。第二个问题,missing closing triple quotes——解决办法:看是否有多余的三引号。第三个问题,逆地址编码时出现lack address or location问题——解决办法:修改所有的address为location,不能有遗漏,上面截图中标红框的都要修改,否则运行不出结果。