
[英]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.