我有一个纬度/经度坐标列表,需要获取每个坐标的状态。这可以通过以下代码完成:
df = pd.read_csv('SOL_A.dsv', delimiter = '|', low_memory=False)
for index, row in df.iterrows():
lat = row['LAT']
lon = row['LONG']
g = geocoder.osm([lat,lon], method='reverse')
st = '_UN'
if g.state != None:
st = g.state
geom_states.append(st)
df['STATE'] = geom_states
但是对于我的约 5k 记录,它最终会开始产生Status code 429 from https://nominatim.openstreetmap.org/search: ERROR - 429 Client Error: Too Many Requests for URL: tps://nominatim.openstreetmap.org/search?q=0.0%2C+0.0&format=jsonv2&addressdetails=1&limit=1
预期效果。
我只需要处理一次,不介意是否需要一整天。我通读了 OSM可接受的使用政策,内容如下:
- 没有大量使用(每秒绝对最多 1 个请求)。
- 提供一个有效的 HTTP Referer 或 User-Agent 来识别应用程序(HTTP 库设置的普通用户代理不会这样做)。
- 清楚地显示适合您的媒体的属性。
- 数据是根据 ODbL 许可提供的,该许可要求以相同的方式共享(尽管合理使用/公平交易可能涵盖少量提取)。
所以..应该有可能(?)
我尝试添加我的 API 密钥 ( geocoder.osm([lat,lon], method='reverse', key=API_KEY)
) 并time.sleep(1.1)
在每次调用之前添加一个以确保,但并没有真正帮助。
想法?