这是我使用的代码:
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()
发布于 2016-06-16 15:03:31
您只是在获取nodes。根据taginfo的说法,大约7%的发电厂被标示为ways (极少数被标示为relations)。你所在的国家的比例可能会有所不同。
您可以在overpass-turbo的帮助下构建特定于国家的查询。这是一个很好的前端来超越API,有一个很好的向导,也有一个稍微改进的查询语言。使用向导并搜索"power=plant in France“将返回以下query
/*
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不支持它。转到导出-> Overpass 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;
现在,area(3602202162)
已经取代了{{geocodeArea:France}}
。面积是Overpass API中的一个特殊元素,它在OSM中是不存在的。区域ID (在本例中)来自2202162 (法国的关系ID )+ 3600000000。请注意,只要法国的关系ID发生更改(极不可能),您就必须更新此编号。
您可以使用this URL从您的应用程序直接调用此查询(也可以通过overpass turbo的导出功能获得)。
https://stackoverflow.com/questions/37843782
复制相似问题