簡體   English   中英

如何使用Python的立交橋API從開放街道地圖中獲取所有電廠?

[英]How to get all power plants from Open Street Map using overpass api with python?

這是我正在使用的代碼:

import overpass
api = overpass.API(timeout=900)
response = api.Get('node["power" = "plant"]')
print(response)

我會得到一本關於電廠的嵌套詞典,但只有187本。我懷疑肯定還有更多。 有誰知道更好的查詢方式? 我最終希望幫助按國家/地區建立發電廠數據庫,也歡迎任何有關如何按國家/地區查詢的幫助。

在下面,我可以使用邊界框查詢節點:

import urllib

workspace = " "

# Make data queries to jXAPI
powerXml = urllib.request.urlopen("http://www.overpass-api.de/api/xapi?node%5Bpower=*%5D%5Bbbox=1.58203,4.56547,15.46875,14.94478%5D").read()

您僅在獲取節點 根據taginfo的說法,大約有7%的發電廠被映射為方式 (很少是關系 )。 比例對於您所在的國家可能有所不同。

您可以在overpass-turbo的幫助下構造針對特定國家的查詢。 它是Overpass API的一個不錯的前端,它有一個不錯的向導,並且查詢語言略有改進。 使用向導並搜索“ power =法國的工廠”將返回以下查詢

/*
This has been generated by the overpass-turbo wizard.
The original search was:
“power=plant in France”
*/
[out:json][timeout:300];
// fetch area “France” to search in
{{geocodeArea:France}}->.searchArea;
// gather results
(
  // query part for: “power=plant”
  node["power"="plant"](area.searchArea);
  way["power"="plant"](area.searchArea);
  relation["power"="plant"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

請注意,您必須增加超時時間(例如,增加到300秒),因為對於如此大的查詢,默認的25秒超時時間非常短。

該查詢返回約800個電廠。 如果要從python腳本調用此查詢,則必須將其轉換回Overpass語言。 {{geocodeArea:France}}東西是Overpass Turbo的擴展,不被Overpass API支持。 轉到導出->超越QL,您將得到以下查詢:

[out:json]
[timeout:180]
;
area(3602202162)->.searchArea;
(
  node
    ["power"="plant"]
    (area.searchArea);
  way
    ["power"="plant"]
    (area.searchArea);
  relation
    ["power"="plant"]
    (area.searchArea);
);
out body;
>;
out skel qt;

現在{{geocodeArea:France}}已替換為area(3602202162) 區域是Overpass API中的特殊元素,在OSM中並不存在。 區域ID(在這種情況下)源自2202162 (法國的關系ID) +3600000000 。請注意,只要法國的關系ID發生更改(極不可能),就必須更新此數字。

您可以使用此URL從您的應用程序直接調用此查詢(也可以通過天橋turbo的導出功能獲得)。

暫無
暫無

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

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