четверг, 24 января 2019 г.

Как скачать конкретный объект из OpenStreetMap

Get one object from OpenStreetMap. Скачать объект из базыданных OSM
Часто мне или кому то из моих знакомых нужно скачать один конкретный объект из базы данных OpenStreetMap (OSM), не скачивая при этом полного набора данных на регион или страну. Например нужно скачать конкретный административный район, заповедник, озеро или что либо другое. В этой статье я покажу самый удобный и доступный каждому способ скачивания одного объекта из OSM и сохранения его в отдельный векторный слой.

Для работы нам понадобится программа QGIS и модуль OSMInfo. Этот модуль разработан компанией NextGIS с целью просмотра детальной информации по конкретным объектам карты OpenStreetMap из интерфейса QGIS.

UPD: на данный момент в QGIS 3.* описанный в статье модуль не доступен. Для работы с модулем установите себе QGIS 2.* или NextGIS QGIS

Запустите QGIS. Зайдите в управление модулями и установите плагин OSMInfo.

Установить QGIS-плагин OSMInfo

Добавьте на панель слоев карту OpenStreetMap, используя плагин QuickMapServices. Как это сделать смотри на странице «Как добавить геосервис в QGIS».

Приблизь карту к интересующему тебя объекту.
В примере я использовал одно из водохранилищ на территории Харьковской области.

Добавить карту OSM (OpenStreetMap) в QGIS как отдельный слой

Для использования инструмента «OSMInfo», нажмите меню «Web» → «OSMInfo» → «Получить информацию из OSM».

Активировать OSMInfo через меню - Получить информацию из OSM

Или нажмите кнопку «Получить информацию из OSM» на панели инструментов.

Кнопка OSMInfo на панели инструментов QGIS

Обратите внимание, что когда инструмент «Получить информацию из OSM» активирован, указатель мышки имеет вид стрелки синего цвета. Кликните им по интересующему объекту на карте OpenStreetMap (слой OSM Standart). Откроется окно «OSM Info». Нужно подождать несколько секунд, прежде чем в нем появится информация из OSM про объекты расположенные в месте клика мышкой. Время ожидания зависит от скорости Интернет-соединения и количества объектов.

Кликните указателем OSMInfo по интересующему объекту на карте

В окне модуля видим список определенных объектов, на которые накладывается точка клика мышкой.

В окне OSMInfo появится список доступных объектов

Если в окне модуля выделить один объект из списка, то контур этого объекта отобразится на карте.

Если  выделить какой то объект в окне OSMInfo, он отобразится в области карты

Жму по треугольнику слева от названия нужного объекта.
После этого разворачивается список атрибутов объекта.

В окне OSMInfo можно посмотреть имеющиеся атрибуты по каждому из объектов

Нажав правой кнопкой мышки по объекту откроем контекстное меню. В нем доступно 2 пункта: «Приблизить» и «Save as temporary layer».

Если нажать «Приблизить», то карта будет спозиционирована так, чтоб определенный объект полностью помещался в область карты.

После нажатия правой кнопки мышки по объекту в окне OSMInfo, откроется контекстное меню из 2-х пунктов приблизить, save as temporary layer

Для сохранения выделенного объекта в новый слой выбираю пункт «Save as temporary layer».

В окне OSMInfo для сохранения слоя выберите пункт save as temporary layer

Видим, что в списке слоев появился новый объект, который называется также как назывался объект в окне «OSM Info». Закрываю окно «OSM Info» нажав на крестик в правом верхнем углу окна.

Видим новый слой на ппанели слоев и в области карты, Закрываем окно OSMInfo

Открываю атрибутивную таблицу созданного слоя и вижу что в ней есть 1 объект, и для этого оэбъекта есть все атрибуты импортированные из OpenStreetMap.

Открыв таблицу атрибутов созданного нового слоя видим в нем 1 объект и атрибуты импортированные из OSM

К сожалению на момент написания статьи у модуля есть 1 важное ограничение — он не получает информацию по полигонам без названия (полигоны у которых не заполнен тег «Name»). Это значит что при помощи этого модуля нельзя скачать безымянный лесной массив или безымянный водоем кликнув по середине этого объекта. Это ограничение связано с ограничениями Overpass, который использует OSM Info для получения данных из OSM. Overpass не воспринимает безымянные объекты как полигоны, и не может соотнести клик по безымянному объекту с этим объектом. Подробнее про технические нюансы работы модуля OSM Info можете посмотреть в соответствующей статье на сайте gis-lab.info 

Но есть ЛАЙФХАК, который позволяет обойти это ограничение Overpass!

Нужно кликнуть по краю безымянного объекта. После этого он отобразится в окне «OSM Info» в разделе «Ближайшие». Вместо названия объекта будет отображаться его OSM ID. На примере идентифицирован безымянный луг с наличием только одного тега landuse=meadow. Далее этот безымянный объект можно сохранить как новый слой, по шагам описанным выше в статье.

Определение безымянного объекта без поля name при помощи QGIS plugin - OSM Info


Смотри видео:


Если вы хотите оперативно получать советы по решению задач в QGIS добавляйтесь в очень полезный Telegram-группу "QGIS взаимопомощь". В это чате уже более полутары тысяч участников, и постоянно идет активное общение и взаимопомощь!

QGIS взаимопомощь✊


Если статья для тебя полезна, подписывайся на мои каналы и группы в соцсетях:

      

2 комментария:

  1. Спасибо, полезная статья! Есть еще одно ограничение у этого модуля. Он не работает, когда у выделенного на карте объекта в атрибутах нет типа. И выдает вот такую ошибку:
    AttributeError: 'NoneType' object has no attribute 'type'
    А к сожалению, на карте OSM много таких объектов

    ОтветитьУдалить
    Ответы
    1. С такой ошибкой не сталкивался, но такова уж специфика данных OSM - большое разнообразие не всегда получается корректно обработать.

      Удалить