
[英]How can I download all hospitals in Africa from OpenStreetMap using Python and the Overpass 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.