У меня есть numpy.ndarray
геокоординат, и я хочу посмотреть, какие из них ie на Аляске. Для этого я хочу получить мультиполигон штата Аляска из OpenStreetMap, а затем использовать некоторую библиотеку форм (возможно, Shapely) для запроса, какая из точек l ie внутри. Тем не менее, я застрял на шаге 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 и загружает их геометрию, как мне это сделать?
В качестве альтернативы, я знаю, что API Overpass может возвращать геометрии, поэтому я предполагаю что-то например,
query = overpassQueryBuilder(
area=alaska_id,
elementType=['relation'],
selector='"id"="1116270"',
includeGeometry=True)
может работать, но этот конкретный запрос c пустой и использует API-интерфейс Overpass для одного объекта Relation, ID которого, как я знаю, кажется очень неправильным, не так ли?