【发布时间】:2020-03-13 12:06:56
【问题描述】:
我有一个numpy.ndarray 的地理坐标,我想看看其中哪些位于阿拉斯加境内。为此,我想从 OpenStreetMap 获取阿拉斯加州的多面体,然后使用一些形状库(可能是 Shapely)来查询其中的点。但是,我被困在第 1 步:我无法获得多面体的几何形状。我已经安装了OSMPythonTools(但如果有更好的工具来完成这项工作,我很乐意切换),我可以像这样向他们查询阿拉斯加
from OSMPythonTools.nominatim import Nominatim
from OSMPythonTools.api import Api
nominatim = Nominatim()
api = Api()
alaska_id = nominatim.query("Alaska, United States of America").areaId()
alaska = api.query('relation/{:}'.format(alaska_id - 3600000000))
然后我想使用alaska.geometry() 获取这个对象的几何形状,但它只返回
Exception: [OSMPythonTools.Element] Cannot build geometry: geometry information not included. (way/193430587)
引发此异常是因为在alaska.__members() 中构成阿拉斯加外边界的方式不包含几何,然后 API 假定已遇到关系并引发令人困惑的异常。
我假设我需要运行一个中间步骤,从 OSM 查询所有这些成员并加载它们的几何图形,我该怎么做?
另外,我知道 Overpass API 可以返回几何图形,所以我假设类似
query = overpassQueryBuilder(
area=alaska_id,
elementType=['relation'],
selector='"id"="1116270"',
includeGeometry=True)
可能有效,但是这个特定的查询是空的,并且使用 Overpass API 处理一个我知道其 ID 的 Relation 对象感觉非常错误,不是吗?
【问题讨论】:
标签: python openstreetmap