工具原料:地理编码工具geocoder
用Python实现地理编码方法如下:
一、看一下它都支持哪些公司的地理编码服务:
二、安装
pip install geocoder
三、地理编码
import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")g = geocoder.arcgis(u"北京市海淀区上地十街10号")g.latlng输出为
[29.9287839, -90.08421849999999]也可以查看完整的geojson
g.geojson
输出为
{'bbox': [-90.0855674802915,29.9274349197085,
-90.0828695197085,
29.9301328802915],
'geometry': {'coordinates': [-90.08421849999999, 29.9287839], 'type': 'Point'},
'properties': {'accuracy': u'ROOFTOP',
'address': u'1403 Washington Ave, New Orleans, LA 70130, USA', 'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'city': u'New Orleans',
'confidence': 9,
'country': u'US',
'county': u'Orleans Parish',
'encoding': 'utf-8',
'housenumber': u'1403',
'lat': 29.9287839,
'lng': -90.08421849999999,
'location': '1403 Washington Ave, New Orleans, LA 70130', 'neighborhood': u'Garden District',
'ok': True,
'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw',
'postal': u'70130',
'provider': 'google',
'quality': u'street_address',
'state': u'LA',
'status': 'OK',
'status_code': 200,
'street': u'Washington Ave'},
'type': 'Feature'}
直接用Google尝试查询中文地址时失败
g = geocoder.google(u"北京市海淀区上地十街10号")g.ok
输出为
False
用百度应该没问题,不过我没有申请相应的key。切换到arcgis,能够成功编码g = geocoder.arcgis(u"北京市海淀区上地十街10号")g.latlng
输出为
[40.050934, 116.30079]
逆地理编码
g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')print g.addressprint g.city
print g.state
print g.country
输出为
1403 Washington Ave, New Orleans, LA 70115, USANew Orleans
LA
US
换成中国的地址
g = geocoder.google([40.050934, 116.30079], method='reverse')print g.address
print g.city
print g.state
print g.country
输出为
Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193Beijing
Beijing Shi
CN
用arcgis的服务试试
g = geocoder.arcgis([40.050934, 116.30079], method='reverse')print g.address
print g.city
print g.state
print g.country
输出为
None
北京市
北京市
CHN
Google转换成的是英文,但地址比较全。arcgis虽然是中文,但是详细的地址居然输出为了None,这有个X用。
其他
geocoder 的功能不止于此,它还可以查IP(包括自己的)。
g = geocoder.ip('199.7.157.0')
print g.latlng
print g.city
g = geocoder.ip('me')
print g.latlng
print g.city
输出为
[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
查询一个城市的空间包围盒
g = geocoder.arcgis(u"山东")
g.bbox
输出为
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
在上一课中,我们已经介绍过使用 Plotly 实现地理信息可视化的方法。但是,那个工具对我们不是很友好,特别是由于某种不可抗力的存在,可能根本无法调试。
不过,pyecharts 的确在地理信息可视化上做得不错——如果仅做国内地图,特别推荐使用,还是通过示例来说明吧。
首先,要安装地图文件,安装方法如下:
不仅可以安装上述官方提供的地图文件,还能够自己制作个性化的地图扩展, 具体请点击这里参阅 。
有了上述基础,就可以进行地理信息可视化了(以下示例的数据源, 请点击这里查看 )。
实现上述效果的类是 Geo,默认情况下绘制散点图,此外可以实现 type='effectScatter'(闪耀的散点图)和 type='heatmap'(热图)。
此图也是动态交互的,通过左侧图例选择不同数值范围,相应地会显示该范围内的数据。
如果按照前面所述安装了各种地图文件,还可以在 geo.add 方法中规定地理范围。
在 pyecharts 地图中认可的城市名称都如同上述结果显示的那样,例如“阜新”,不要写成“阜新市”。
下面就绘制江苏省的空气质量分布图。
输出结果:
这里的 geo.add 参数与前面的不同,导致了展示效果的差异。
一直以来,房价都是人们关注的话题,下面就用可视化的方式研究一下近十年(2009—2018 年)全国部分城市平均房价(数据源: https://github.com/qiwsir/DataSet/tree/master/house )。
输出结果:
在热图查看房价的基础上,为了更准确查看某些城市的房价走向,可以使用折线图看看趋势,例如下列几个城市。