我需要根据纬度和经度来获取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)
&其次,当应用于多个坐标的dataframe上时,这只打印没有坐标的地址,这使得映射到原始数据集变得困难。另外,它没有给出英文输出,我也尝试了以下方法:
test=rectangles_df.apply(geolocator.reverse(language='en'))
但这显然不起作用,因为它需要将坐标作为强制参数。
我们可以做什么。
发布于 2019-03-10 14:02:47
首先,根据Nominatim的使用策略,唯一的限制是一个请求/秒。除了从one request limit https://operations.osmfoundation.org/policies/nominatim/派生的每天86400个请求(1秒*60*60*24)之外,我看不到任何每日限制
保证每秒不会发出超过一个请求的最简单方法是
time.sleep(1)
当通过请求进行交互时,在发出请求之前。
其次,location对象将坐标和地址都保留为属性:
print(location.latitude, location.longitude, location.adress)
第三,使用geopy可以声明语言。默认情况下为false
reverse(query, exactly_one=True, timeout=DEFAULT_SENTINEL, language=False, addressdetails=True)
查看与Nominatim相关的地理文档:https://geopy.readthedocs.io/en/stable/#nominatim
https://stackoverflow.com/questions/54945260
复制相似问题