具有 Python Nominatim 限制和改进 geopy.geocoders 的反向地理编码

Reverse geocoding with Python Nominatim limitations & improvement geopy.geocoders

我需要根据纬度和经度获取 10000 的地址,为此我使用了 geopy.geocoders。但是,第一个限制是一天中可以反向地理编码的坐标数量有限制。

from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
geolocator = Nominatim(user_agent="specify_your_app_name_here",timeout=None)

rectangles_df=df["LatLong"].head(2)

location=rectangles_df.apply(geolocator.reverse)

&其次,当应用于多个坐标的数据框时,这只会打印没有坐标的地址,这使得很难映射到原始数据集。它也没有给出英文输出我也尝试了以下:

test=rectangles_df.apply(geolocator.reverse(language='en'))

但这显然是行不通的,因为它需要坐标作为强制参数。

可以做什么。

首先,根据 Nominatim 使用政策,唯一的限制是一个 request/second。我没有看到超过每天 86400 个请求(1 秒 * 60 * 60 * 24)的任何每日限制来自一个请求限制 https://operations.osmfoundation.org/policies/nominatim/

保证您每秒发出的请求不超过一个的最简单方法是

  time.sleep(1)

在通过请求进行交互时,在发出请求之前。

其次,位置对象将坐标和地址都保存为属性:

print(location.latitude, location.longitude, location.adress)

第三,用geopy你可以声明语言。默认是false

reverse(query, exactly_one=True, timeout=DEFAULT_SENTINEL, language=False,  addressdetails=True)

查看关于 Nominatim 的 geopy 文档: https://geopy.readthedocs.io/en/stable/#nominatim