反向地理编码 - 使用 geopy.Nominatim

如何解决反向地理编码 - 使用 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 函数可以允许批量操作,这也可能是您的解决方案,我会链接文档。

速率限制器链接:https://geopy.readthedocs.io/en/latest/index.html?highlight=rate%20limiter#module-geopy.extra.rate_limiter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?