首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用overpass api和python从Open Street Map获取所有发电厂?

如何使用overpass api和python从Open Street Map获取所有发电厂?
EN

Stack Overflow用户
提问于 2016-06-16 03:03:51
回答 1查看 1.3K关注 0票数 0

这是我使用的代码:

代码语言:javascript
运行
复制
import overpass
api = overpass.API(timeout=900)
response = api.Get('node["power" = "plant"]')
print(response)

我得到了一本电厂的嵌套字典,但只有187本。我怀疑肯定还有更多。有谁知道更好的查询方式吗?我最终想要帮助建立一个按国家的发电厂数据库,并欢迎任何关于如何按国家查询的帮助。

下面,我可以使用边界框查询节点:

代码语言:javascript
运行
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2016-06-16 15:03:31

您只是在获取nodes。根据taginfo的说法,大约7%的发电厂被标示为ways (极少数被标示为relations)。你所在的国家的比例可能会有所不同。

您可以在overpass-turbo的帮助下构建特定于国家的查询。这是一个很好的前端来超越API,有一个很好的向导,也有一个稍微改进的查询语言。使用向导并搜索"power=plant in France“将返回以下query

代码语言:javascript
运行
复制
/*
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,您将获得以下查询:

代码语言:javascript
运行
复制
[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的导出功能获得)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37843782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档