Geocoder
地理编码是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,您可以借此在地图上放置标记,或在地图上定位。
反向地理编码是将地理坐标转换为可人工读取的地址的过程。反向地理编码器还可让您找到对应于给定的地点 ID 的地址。
Geocoder 提供了一个用于以动态方式根据用户输入进行地理编码和反向地理编码的地理编码器类。
安装
直接运行命令行输入:
pip install geocoder
许多地图提供商如Google和Bing都有地理编码服务,但是不同服务商提供不同的JSON响应,并且通常都不使用Python获取这些响应。而Geocoder就做这件事,整合许多地图服务商并提供python接口。我们现在就来学习Geocoder吧
使用
在使用之前,我们需要了解一个地理坐标系的问题:在进行地图地理开发过程中,我们一般能接触到以下三种类型的地图坐标系:
1.WGS-84原始坐标系
一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;
但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用;
2.GCJ-02坐标系
GCJ-02坐标系又名“火星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密而成,在国内,必须至少使用GCJ-02坐标系,或者使用在GCJ-02
加密后再进行加密的坐标系,如百度坐标系。高德和Google在国内都是使用GCJ-02坐标系,可以说,GCJ-02是国内最广泛使用的坐标系;
3.百度坐标系:bd-09
百度坐标系是在GCJ-02坐标系的基础上再次加密偏移后形成的坐标系,只适用于百度地图。
参考 https://www.jianshu.com/p/8975586a820e
我们可以从官网进行深入学习,这里我们只讲一些简单的例子。由于众所周知的原因,我们使用不了Google maps服务,所有我们使用OpenStreetMap。
我们查看一个地理编码:
import geocoder
g = geocoder.osm('Mountain View, CA')
print(g.geojson)
print(g.json)
print(g.wkt)
print(g.osm)
GeoJSON是一种对各种地理数据结构进行编码的格式。JSON是一种轻量级的数据交换格式。WKT是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。osm文件是OpenStreetMap的标准数据格式。
进行反向地理编码:
g = geocoder.osm([45.15, -75.14], method='reverse')
print(g.city)
print(g.state)
print(g.status_code)
查看家庭住址:
g = geocoder.osm("453 Booth Street, Ottawa ON")
print(g.geojson)
print(g.address)
print(g.postal)
print(g.street)
查看IP地址:
g = geocoder.ip('199.7.157.0')
print(g.latlng)
print(g.city)
g = geocoder.ip('me')
print(g.latlng)
print(g.city)
me就是查看本机IP所处位置,看到没有,输出的是zhongcun jiedao,中文名是“钟村街道”
查看一个城市的空间包围盒:
g = geocoder.arcgis(u"山东")
print(g.bbox)
这里我们使用arcgis服务,arcgis是全球地图服务商,输出内容为中文,比如:
g = geocoder.arcgis([40.050934, 116.30079], method='reverse')
print(g.address)
print(g.city)
print(g.state)
print(g.country)
使用百度服务
如果我们想使用百度、高德等国内地图服务商的服务,我们需要首先到官网申请对应的key,例:我们首先到官网申请key,这里是我申请的结果:
编码:
import geocoder
g = geocoder.baidu('中国', key='<API KEY>')
print(g.json)
反向编码:
import geocoder
latlng = [45.3, -105.1]
g = geocoder.baidu(latlng, method='reverse', key='<API KEY>')
print(g.json)
好了,请愉快的玩转Geocoder吧