如何解决反向地理编码 - 使用 geopy.Nominatim
我已经尝试了几个小时,但我不知道我应该做什么。我有一个包含纬度和经度数据的数据框:
year month lat lon SMI
0 2010 1 47.266481 10.149783 0.830187
1 2010 2 47.266481 10.149783 0.754513
2 2010 3 47.266481 10.149783 0.663457
3 2010 4 47.266481 10.149783 0.407255
4 2010 5 47.266481 10.149783 0.972982
5 2010 6 47.266481 10.149783 0.147511
6 2010 7 47.266481 10.149783 0.085912
7 2010 8 47.266481 10.149783 0.936917
8 2010 9 47.266481 10.149783 0.673884
9 2010 10 47.266481 10.149783 0.242676
10 2010 11 47.266481 10.149783 0.797547
11 2010 12 47.266481 10.149783 0.923627
12 2011 1 47.266481 10.149783 0.895137
13 2011 2 47.266481 10.149783 0.471502
14 2011 3 47.266481 10.149783 0.340169
每个月我有 23,199 个不同的地理点,我必须将它们与它们各自的邮政编码(德国)进行匹配。
基于此讨论(https://gis.stackexchange.com/questions/352961/convert-lat-lon-to-zip-postal-code-using-python),我想出了以下代码:
import pandas as pd
import geopy
geopy.geocoders.options.default_user_agent = "myMAil"
def get_zipcode(subsmi,geolocator,lat_field,lon_field):
location = geolocator.reverse((subsmi[lat_field],subsmi[lon_field]))
return location.raw['address']['postcode']
geolocator = geopy.Nominatim()
zipcodes = subsmi.apply(get_zipcode,axis=1,geolocator=geolocator,lat_field='lat',lon_field='lon')
只要数据框保持在 10 行,代码就可以工作。一旦我想将该代码应用于包含超过 10 行的数据帧,就会出现 KeyError: 'postcode'。 我知道 Nominatim 限制了一个人可以逆转的分数。有没有人知道我如何更改代码,以便我最终可以扭转所有观点。
感谢您的帮助。
解决方法
如果限制是您认为的 Nominatim,则可以选择将您的数据分成 10 个块,然后 10 x 10 检查它们,直到找到最接近的解决方案。
我还发现有一个 rate_limiter 函数可以允许批量操作,这也可能是您的解决方案,我会链接文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。