簡體   English   中英

如何在 OSM 上批量反向經緯度

[英]How batch reverse lat/long on OSM

我有一個經緯度坐標列表,需要獲取每個坐標的狀態。 這可以通過代碼完成:

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產生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 庫設置的庫存 User-Agents 不會這樣做)。
  • 清楚地顯示適合您的媒體的歸屬。
  • 數據是在 ODbL 許可下提供的,該許可需要相同的共享(盡管小型提取可能會被合理使用/公平交易所涵蓋)。

所以..應該是可能的(?)

我嘗試添加我的 API 密鑰( geocoder.osm([lat,lon], method='reverse', key=API_KEY) )並在每次調用之前添加一個time.sleep(1.1)以確保,但並沒有真正幫助。

想法?

提名使用政策明確規定:

  • 沒有大量使用(絕對最大每秒 1 個請求)。
  • 提供一個有效的HTTP RefererUser-Agent標識應用程序(由 http 庫設置的庫存 User-Agents 不會這樣做)。
  • 清楚地顯示適合您的媒體的歸屬。
  • 數據是在ODbL許可下提供的,該許可需要相同的共享(盡管小型提取可能會被合理使用/公平交易所涵蓋)。

看起來您沒有將請求限制為每秒最多 1 個。 另外,我不確定您是否傳遞了有效的 HTTP 引用程序(又名用戶代理)。

請注意,此使用策略僅適用於 OSM 的公共 Nominatim 實例。 您始終可以安裝自己的 Nominatim 服務或切換到替代/商業 Nominatim 實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM