python网络编程/地理位置编解码的实现

一.基于第三方应用库的实现

(1)安装现有的库geopy库

直接在cmd中使用pip命令安装geopy库

(2)申请百度地图服务ak

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,不能有遗漏,上面截图中标红框的都要修改,否则运行不出结果。

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值