这是我正在使用的代码:
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()
答案 0 :(得分:2)
您只提取nodes。根据{{3}},大约7%的发电厂被映射为taginfo(极少数为ways)。您所在的国家/地区的比例可能会有所不同。
您可以在relations的帮助下构建针对特定国家/地区的查询。它是Overpass API的一个不错的前端,有一个很好的向导,还有一个稍微改进的查询语言。使用向导并搜索“power = plant in France”将返回以下overpass-turbo:
/*
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(在本例中)来自query(法国的关系ID)+ 3600000000。请注意,只要法国的关系ID发生变化(极不可能),您就必须更新此号码。
您可以使用2202162直接从您的应用程序调用此查询(也可通过overpass turbo的导出功能获得)。