怎么样用Python实现地理编码

Python017

怎么样用Python实现地理编码,第1张

工具原料:地理编码工具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.address

print 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 )。

输出结果:

在热图查看房价的基础上,为了更准确查看某些城市的房价走向,可以使用折线图看看趋势,例如下列几个城市。