天天看点

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

最近想做一个简单的地理位置分析,比如获取一些城市公交站点对应的geohash,geohash其实是将平时常见的经纬度进行了降维,这样可以进行类似附近的餐馆等内容的分析。

<a href="http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding">http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding</a>

正/逆地理编码服务(又名Geocoding API)是一类Web API接口服务;

正向地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;

逆向地理编码服务提供将坐标点(经纬度)转换为对应位置信息(如所在行政区划,周边地标点分布)功能。

百度地图坐标拾取

<a href="http://api.map.baidu.com/lbsapi/getpoint/index.html">http://api.map.baidu.com/lbsapi/getpoint/index.html</a>

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献
python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

可以直接使用的百度url:后面直接跟地址就好如上图(key不知道是谁的),可以发现百度的搜索分词权重直接把雍和宫地铁站定位到了雍和宫,

<a href="http://api.map.baidu.com/geocoder?key=f247cdb592eb43ebac6ccd27f796e2d2&amp;output=json&amp;address=">http://api.map.baidu.com/geocoder?key=f247cdb592eb43ebac6ccd27f796e2d2&amp;output=json&amp;address=</a>

url new key:

<a href="http://api.map.baidu.com/geocoder?key=xpKTc80ZnEGiy1elZCMtEepEYKj5tqQr&amp;output=json&amp;address=">http://api.map.baidu.com/geocoder?key=xpKTc80ZnEGiy1elZCMtEepEYKj5tqQr&amp;output=json&amp;address=</a>

<a href="http://api.map.baidu.com/geocoder/v2/?address=&amp;output=json&amp;ak=xpKTc80ZnEGiy1elZCMtEepEYKj5tqQr">http://api.map.baidu.com/geocoder/v2/?address=&amp;output=json&amp;ak=xpKTc80ZnEGiy1elZCMtEepEYKj5tqQr</a>

高德地图坐标拾取

<a href="http://lbs.amap.com/console/show/picker">http://lbs.amap.com/console/show/picker</a>

发送一个request请求,带上地理位置和api key 即可返回一个包含了经纬度str。

地理编码接口:

谷歌地图采用的是WGS84地理坐标系(中国范围除外)

谷歌中国地图、搜搜中国地图、高德地图采用的是GCJ02地理坐标系

百度采用的是BD09坐标系。

而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系。

所以我们要根据得到的经纬度的坐标类型和地图厂商类型在地图上标点,否则会出现获取的位置误差。为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准,也就是国家规定不能直接使用WGS84地理坐标系。

WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。

GCJ02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。

BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。

<a href="https://www.cnblogs.com/LBSer/p/3310455.html">https://www.cnblogs.com/LBSer/p/3310455.html</a>

当geohash base32编码长度为8时,精度在19米左右,而当编码长度为9时,精度在2米左右,所以一般来说用八位就够用。

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献
python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

python3如何使用geohash呢,网上说使用pip install geohash后import geohash 会报错,当然同样的作者提供了geohash包的fix版geohash2,所以安装时候应该是:(改源码的方式有点太高大上,不太安全?)

我很纳闷的是python中能够生成geohash 的包实在是太多了:

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献
python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献
python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

可以看到7位geohash编码带上一个包围盒,相对于6位geohash编码准确许多

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献
python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

简单写了一个类,使用geohash2(作者居然没有提供),我只好复制了mzgeohash的部分代码

<a href="https://gitee.com/wangyaning/python/tree/master/geohash">https://gitee.com/wangyaning/python/tree/master/geohash</a>

可以直接这么用:

<a href="https://cevin.net/geohash/">https://cevin.net/geohash/</a>

python实现地理位置类数据爬取与geohash应用初探1. 正逆地理编码2. 坐标系3. geohash测试geohash查询接口结构化数据的处理部分参考文献

爬好数据的后处理,入库

新学了sqlldr命令,挺快,连python代码都不用写了

xxx.ctl文件如下

简单的城市名转换成经纬度:

<a href="https://www.cnblogs.com/zle1992/p/7209932.html">https://www.cnblogs.com/zle1992/p/7209932.html</a>

批量获取经纬度:

<a href="https://www.cnblogs.com/reboot777/p/7124010.html">https://www.cnblogs.com/reboot777/p/7124010.html</a>

用Python计算北京地铁的两站间最短换乘路线:

<a href="http://blog.csdn.net/myjiayan/article/details/45954679">http://blog.csdn.net/myjiayan/article/details/45954679</a>

使用爬虫获取获取所有的 站点名

<a href="http://blog.csdn.net/wenwu_both/article/details/70168760">http://blog.csdn.net/wenwu_both/article/details/70168760</a>

高德地图地理编码服务

<a href="http://blog.csdn.net/u013250416/article/details/71178156">http://blog.csdn.net/u013250416/article/details/71178156</a>

<a href="https://www.cnblogs.com/xautxuqiang/p/6241561.html">https://www.cnblogs.com/xautxuqiang/p/6241561.html</a>