1.使用geopy库实现百度地理位置编码功能:
2.使用requests库实现百度地理位置编码功能:
3.使用geocoder库实现百度地理位置编码功能:
4.使用http.client库实现百度地理位置编码功能:
5.使用socket库实现百度地理位置编码功能:
6.使用学习的四个库实现百度地理位置逆编码功能:
1.使用geopy库实现百度地理位置编码功能:按照示例代码将baidu改为baiduv3之后,填入申请的key就完成了。
2.使用requests库实现百度地理位置编码功能:对示例代码实现时,示例中使用的时谷歌地图,因此在代码中将谷歌地图的地址改为百度地图的,并且两者get请求时的params参数不同,做出对应修改。
3.使用geocoder库实现百度地理位置编码功能:先在terminal中用pip安装第三方库。
按照示例代码运行,发现结果为app被禁用,搜索后得知,百度v2服务已经暂停,要使用v3的服务。之后找到geocoder库中.baudu方法的实现函数get的实现函数中返回了一个option的可迭代对象,在其中找到实现方法BaiduQuary,将其中url修改为v3的地址。
出现的错误:第一次爆出key_value错误,一开始以为是他内置代码对v2和v3的支持格式不一样,结果是url写成了逆向解析的地址。
发现baidu.py下有main入口的测试函数,改好url之后错误变成了查找无结果,排除之后发现被这个测试函数误导了,这个库的查找不能直接查到某某路,直接运行‘甘肃政法大学’就可以找到。
4.使用http.client库实现百度地理位置编码功能:先按示例修改为百度的api接口查询。第一次运行时出现报错,查询得知是json.load的接收类型不对把代码的返回从xml变成json之后解决
5.使用socket库实现百度地理位置编码功能:按示例代码对应修改为百度的api接口,主要是在http请求头中和socket.connect的地址。
第一次运行报错,ascii编码不行,因为查询的地址是汉字,因此改用utf-8编码之后成功。
6.使用学习的四个库实现百度地理位置逆编码功能:
1.直接将原来调用的geocode变为reverse即可实现逆地理编码
2.利用request查询时,先是要访问逆地理编码的对应地址,由于v3的地理编码时和逆地理编码时的url中的参数不一样,因此要调整代码中访问的params,从address,ak,output变成ak,output,location的形式否则会出现报错,下面三个库的实现也是同理。
3.在gocoder.baidu方法的参数中加入method = reverse,查看官方文档,并将输入的经纬度用list的形式传入,即可实现。
4.正如前面所说利用httpclient实现时,需要改地址且改变参数
5.socket库实现也是同理,但此处的修改地方变成了http报文中
总结:
在本次实验中,我们使用了5个Python库来实现百度地理编码和逆地理编码功能,包括geopy、requests、geocoder、http.client和socket。每个库的实现方式和注意事项如下:
1. geopy库
- 只需将代码中的'baidu'改为'baiduv3',并填入申请的密钥即可实现地理编码功能
- 将原来的geocode()方法改为reverse_geocode()即可实现逆地理编码
2. requests库
- 将谷歌地图API地址改为百度地图API地址
- 注意地理编码和逆地理编码的参数(params)不同,需要相应调整
3. geocoder库
- 安装geocoder库
- 修改geocoder.baidu中的url为v3版本地址
- 地理编码直接传入地址字符串
- 逆地理编码需要设置method='reverse',并将经纬度以列表形式传入
4. http.client库
- 将请求地址改为百度地图API
- 注意将返回类型改为json格式
5. socket库
- 修改请求地址为百度地图API
- 注意编码问题,使用utf-8编码
- 修改HTTP请求头和请求参数
总的来说,主要注意事项包括:使用正确的API接口地址、参数设置、编码问题等。对于逆地理编码,需要将地理编码方法相应改为逆地理编码方法,并调整输入参数形式(如geocoder库中的列表形式)。
标签:编码,地理位置,实现,地址,api,地理,百度 From: https://blog.csdn.net/hsjdbbsbsn/article/details/137085772