繁体   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-2025 STACKOOM.COM