OpenStreetMap

В последние годы проект OpenStreetMap стал очень популярен, потому что во многих странах свободные геоданные, такие, как, например, дорожная сеть, просто отсутствовали. Цель проекта OSM — создать свободно редактируемую карту всего мира с использованием данных GPS, аэрофотосъемки или просто знания местности. С тем, чтобы поддержать это начинание, QGIS предоставляет модуль, который даёт пользователям возможность работать с данными OSM.

Модуль предоставляет всю базовую функциональность для работы с данными OSM: загрузку данных, импорт, сохранение, скачивание, редактирование и выгрузку обратно на сервер OpenStreetMap. Источником вдохновления при создании модуля послужили другие редакторы данных OSM. Целью авторов модуля было объединение их функциональности и достижение наилучшего результата.

Следующий раздел дает краткое введение в принципы проекта OSM.

Следующие параграфы были частично позаимствованы с веб-сайта OpenStreetMap http://www.openstreetmap.org.

Проект OpenStreetMap

OpenStreetMap — проект, который создаёт свободно редактируемую карту мира. Карта создаётся с помощью GPS, аэрофотоснимков и других источников, а также знания местности. Проект появился потому, что использование большинства карт ограничено законодательно или технически, что сдерживает их творческое использования способами, которые раньше сложно было представить. Как изображения (тайлы),так и векторные данные OSM доступны для загрузки и имеют лицензию Creative Commons Attribution ShareAlike 2.0.

Figure OpenStreetMap 1:

../../../_images/osmweb.png

Данные OpenStreetMap в сети

OpenStreetMap был вдохновлен такими проектами, как Wikipedia — на карте сайта (см. рисунок Figure_OpenStreetMap_1) есть большая закладка Редактировать и поддерживается полная история изменений. Зарегистрированные пользователи могут загружать GPS-треки и редактировать векторные данные с помощью различных инструментов.

Структура данных OSM — это класс объектов, которые могут быть сохраненены с помощью API на сервер. Три поддерживаемых типа объектов — это: узлы, линии и отношения.

  • Узел — пара координат в системе широта/долгота. Он используется для построения других объектов и как объект сам по себе (например Точки интереса — POI), если он снабжен правильной атрибутикой.

  • Линия — список из минимум двух узлов, которые описывают линейный объект, такой, как улица или что-то наподобие. Узлы могут входить в состав нескольких линий.

  • Отношение — группа из нуля или более примитивов с назначенными ролями. Оно используется для указания отношений между объектами и может моделировать абстрактный объект.

Этими примитивами задаётся множество различных объектов карты («Точка интереса», «Улица», «Трамвайная линия», «Автобусная остановка» и т.п.). Атрибутика данных хорошо известна постоянным участникам OSM и сохраняется в виде тегов, состоящих из ключа и значения. Данные OSM обычно распространяются в формате XML. XML также используется для обмена информацией с сервером OSM.

Связь QGIS – OSM

Первая часть этой секции описывает, как примитивы OSM показываются в векторных слоях QGIS. Как было указано выше, данные OSM состоят из узлов, линий и отношений. В QGIS они показываются как три разных типа слоёв: точечный, линейный и полигональный. Убрать один из этих слоёв и продолжить работу с другими — невозможно.

  • Точечный слой — показывает все объекты типа «узел», которые являются самостоятельными. Это означает, что в этом слое будут только узлы, которые не включены в линии.

  • Линейный слой — показывает те объекты типа «линия», которые не замкнуты. Это означает, что ни одна из этих линий не начинается и заканчивается одинаковым узлом.

  • Полигональный слой — показывает все линии, не включенные в линейный слой.

Еще один примитив OpenStreetMap — отношение. Специального типа векторного слоя для отображения отношения нет. Отношение определяет взаимосвязи между любым количеством объектов. После того, как точка, линия или полигон отображены на карте, модуль показывает все отношения, членом которых является примитив.

Связать данные OSM со стандартными инструментами редактирования QGIS было довольно сложно. Эти инструменты созданы для редактирования одного векторного слоя единовременно, не важно, какого типа объекты он показывает. Это означает, что, если данные OSM загружены в QGIS с помощью модуля, вы теоретически сможете редактировать одновременно точечный, линейный и полигональный слои.

Проблема в том, что линейный слой состоит из двух разных примитивов, узлов и линий. Линии состоят из узлов. Если вы начали редактировать линейный слой и изменили форму линейного объекта, ваши действия должны привести изменению не только линий, но и узлов, которые являются её составляющими.

Стандартные инструменты редактирования QGIS не могут сказать провайдеру OSM, какие участники какой линии изменились, и как. Они способны сказать только, какие новые участники появились, а этого недостаточно, чтобы правильно передать изменения в базу данных OSM. Линейный слой не знает идентификаторов участников линии. Те же самые проблемы возникают при попытке редактирования слоя полигонов.

Исходя из этих соображений, плагину OSM нужны свои собственные инструменты редактирования данных OSM. Когда для редактирования используются они, изменение данных OSM осуществляется корректно. Инструменты редактирования в составе модуля включают средства создания, удаления и перемещения точек, линий, полигонов и отношений.

Примечание

Для связи модуля OSM и стандартных инструментов редактирования необходимы изменения в ядре QGIS.

Установка

Модуль OpenStreetMap является расширением ядра QGIS. Если включена поддержка Python, модуль «OpenStreetMap» должен появиться в Менеджере модулей и может быть выбран, как описано в разделе Загрузка основных модулей QGIS).

Основной интерфейс пользователя

При первом запуске плагина OSM и загрузки первых данных, появляются несколько новых иконок на панели инструментов QGIS, а также несколько новых плавающих окон, показанных на рисунке figure_OpenStreetMap_2.

Figure OpenStreetMap 2:

../../../_images/osm_widgets.png

Интерфейс пользователя модуля OSM

Панель объектов

Панель объектов помогает идентифицировать объекты OSM. Она показывается основную информацию о типе объекта и его идентификаторе, а также информацию о том, кто и когда изменял этот объект. На панели объектов также находятся все инструменты редактирования (в верхней части панели). Инструменты редактирования более подробно освещены в секциях ниже. Сначала панель заблокирована. Она разблокируется после успешной загрузки некоторого количества данных OSM.

Панель отмены/возврата

Панель отмены/возврата используется для отмены и возврата действий редактирования. На панели располагаются не только классические кнопки отмены и возврата, но и список с кратким описанием предпринятых действий. По умолчанию панель скрыта. Появляется панель после нажатия на соответствующую кнопку на панели объектов.

Иконки основной панели инструментов

osm_load Загрузить данные из файла используется для загрузки OSM из XML файла.

osm_featureManager Показать/Скрыть панель объектов используется для открытия или скрытия панели объектов. Панель объектов помогает просмотреть информацию об объекте, также на ней размещены инструменты редактирования.

osm_download Загрузить данные с сервера используется для загрузки данных с сервера OpenStreetMap.

osm_upload Выгрузить данные используется для выгрузки изменений (относительно текущих данных).

osm_import Импортировать данные из слоя используется для импорта данных из векторного слоя. Должен быть загружен по крайней мере один векторный слой и должны быть выбраны данные OSM.

osm_save Сохранить данные в файл используется для сохранения данных в файл XML.

Более детальная информация о каждой панели, кнопке и диалоге может быть получена из соответствующих разделов этой документации, разделенной согласно функциональности (редактирование, идентификация и т.д.).

Загрузка данных OSM

Первым делом, после запуска модуля нужно открыть какие-то данные OSM. Они могут быть загружены из файла или загружены непосредственно с сервера. Здесь мы расскажем про первый метод.

Для загрузки данных из файла нажмите на кнопку osm_load Загрузить данные из файла. Если у вас нет такой кнопки, возможно, у вас скрыта панель объектов модуля. Включите её заново, выбрав Установки ‣ Панели ‣ OpenStreetMap.

Figure OpenStreetMap 3:

../../../_images/osmloaddialog.png

иалог загрузки данных OSM

Описание элементов диалога даётся ниже.

Загружаемый файл OpenStreetMap: Нажмите на кнопку browsebutton, чтобы выбрать файл .osm, данные которого необходимы.

Добавить колонки для тегов: Эта опция определяет связь между данными OSM и QGIS. Каждый объект OSM имеет теги (пары ключей и значений), которые определяют свойства объекта. Каждый объект в QGIS также имеет атрибуты (ключ и значение). Эта опция позволяет определить, какие свойства объектов OSM должны быть видны, когда показывается информация об объектах QGIS.

Заменить текущие данные: Включение этой опции означает, что новые данные должны заменить существующие данные, с которыми работает пользователь. Слои текущих данных будут удалены, и будут загружены новые. Когда данные загружаются в первый раз, эта опция не активна, так как заменять пока нечего.

Использовать пользовательский рендерер: Эта опция определяет степень детализации карты. Существует три уровня детализации данных OSM. Используйте «Мелкий масштаб», если вам нужно просматривать данные на уровне региона. Вы также можете использовать «Средний масштаб» или «Крупный масштаб». Версия QGIS 2.0 не поддерживает динамическую смену стиля отрисовки.

Нажмите [Ok], чтобы загрузить данные. Если это первая загрузка файла, то сначала плагин должен обработать базу данных. Это может занять несколько минут или секунд, в зависимости от количества данных.

Просмотр данных OSM

После того, как данные OSM загружены, вы можете просмотреть информацию по объектам, используя инструмент osm_identify Определить объекты, расположенную справа в панели объектов OSM. Используя этот инструмент, вы можете легко изучить объекты на карте. Когда курсор мыши наведен на объект, вы можете увидеть всю информацию о нем в панели объектов OSM. Объект также подсвечивается на карте, так что пользователь может видеть, что именно определилось.

Вкладка Свойства панели содержит все теги объекта. Перейдя на вкладку Отношение, можно увидеть список всех отношений, связанных с текущим объектом.

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

Иногда в месте щелчка левой кнопкой находится более одного объекта. Часто в такую ситуацию можно попасть при щелчке на перекресток, или если масштаб карты невелик. В этой ситуации определяется (и подсвечивается) только один из объектов, но плагин запоминает их все. Потом, в режиме паузы, вы можете пролистать объекты по кругу правой кнопкой.

Редактирование базовых данных

Слово «базовых» в заголовке секции означает, что речь пойдет о всех примитивах, кроме отношений — узлах и линиях. Если вам нужна информация о редактировании отношений, просто пропустите эту секцию и ознакомьтесь со следующей.

Функции по редактированию базовых данных — основная часть плагина OSM. Вы может изменять свойства, расположение или форму любого примитива. Вы можете удалять объекты и добавлять новые. Все изменения узлов и линий будут запомнены и их можно удобно отменить/вернуть и выгрузить на сервер OpenStreetMap.

Изменение тегов объектов

Теги объектов можно изменять прямо в таблице тегов, которая располагается в панели объектов. Не забудьте сначала выбрать объект.

Figure OpenStreetMap 4:

../../../_images/osm_changefeaturetag.png

Изменение тега объекта OSM

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

Чтобы добавить новый тег, введите ключи и значение в последнюю строку таблицы, где находится надпись «<следующее значение тега>». Отметьте, что вы не можете изменить ключ существующего тега. Для удобства ввода тегов можно использовать подсказывающие выпадающие списки уже заполненные возможными ключами и их значениями.

Создание точек

Для создания точки служит кнопка osm_createPoint Создать точку в панели объектов. Выберите этот инструмент и щелкайте им по карте, созданные объекты сразу будут определяться. Если вы щелкните по линии или полигону, будет создана точка на линии и полигоне как их часть. Если курсор находится над существующей точкой, новая точка создана быть не может. В этом случае будет показано следующее сообщение:

Figure OpenStreetMap 5:

../../../_images/osm_pointcreation.png

Сообщение при создании точки

Механизм, помогающий пользователю точно попасть в линию или полигон, называется «прилипание», он включен по умолчанию. Если нужно создать точку очень близко к линии, но не на ней, нужно отключить прилипание, нажав клавишу Ctrl.

Создание линии

Для создания линии служит инструмент osm_createLine Создать линию, кнопка которого располагается на панели объектов. Чтобы создать линию, выберите этот инструмент и начните щёлкать левой кнопкой мыши на карте. Каждый из щелчков превратится в узел — часть новой линии. Создание линии завершается, когда вы первый раз щёлкаете правой кнопкой мыши. Линия сразу появится на карте.

Примечание

Линию с менее чем двумя узлами создать невозможно, в случае, если узел один, операция просто игнорируется.

Прилипание работает для всех узлов карты — точек из точечного слоя и всех узлов линейного и полигонального слоёв. Прилипание можно отключить, нажав Ctrl.

Создание полигона

Создать полигон можно инструментом osm_createPolygon Создать полигон, кнопка которого располагается на панели объектов. Для создания полигона выберите инструмент и начните щёлкать левой кнопкой на карте. Каждый из щелчков превратится в узел — часть нового полигона. Создание полигона будет завершено, когда вы первый раз щёлкнете правой кнопкой мыши. Полигон сразу появится на карте. Полигон из менее чем трех узлов создать невозможно. В случае, если узлов меньше трех, операция просто игнорируется. Прилипание работает для всех узлов карты — точек из точечного слоя и всех узлов линейного и полигонального слоёв. Прилипание можно отключить нажав Ctrl.

Перемещение объектов

Если вы хотите передвинуть объект (не важно какого типа), используйте инструмент osm_move Перемещение объектов, кнопка которого располагается на панели объектов. Найдите объект, который нужно переместить, наведя на него курсор и щёлкнув по нему. Если выберется не тот объект, не двигайте его, щёлкните правой кнопкой, пока не выберется нужный. После того, как объект выбран и вы переместили курсор, прокручивать объекты больше будет нельзя. Для подтверждения перемещения щёлкните левой кнопкой мыши, для отмены щёлкните правой.

Если вы перемещаете объект, связанный с другими объектами, эти связи не будут нарушены. Другие объекты также могут видоизмениться, чтобы подстроиться к новой позиции перемещенного объекта.

Для этой операции также поддерживается прилипание:

  • Когда перемещается отдельная точка, не являющаяся частью линии или полигона, осуществляется прилипание ко всем сегментам и узлам.

  • Когда перемещается точка, являющаяся частью линии или полигона, осуществляется прилипание ко всем сегментам и узлам, кроме узлов родительских объектов.

  • Когда перемещается линия или полигон, осуществляется прилипание ко всем узлам. Обратите внимание, что модуль пытается выполнить прилипание только к трём ближайшим к курсору узлам, иначе процесс был бы очень медленным. Прилипание можно отключить, удерживая Ctrl в процессе.

Удаление объектов

Если нужно удалить объект, его сначала нужно идентифицировать. Далее, чтобы его удалить, нужно использовать инструмент osm_removeFeat Удалить этот объект, кнопка которого расположена на панели объектов. При удалении линии/полигона удаляется сама линия/полигон и все участвующие в ней узлы, которые не принадлежат другой линии/полигону.

При удалении точки, которая является участником другой линии/полигона, точка удаляется и изменяется геометрия родительской линии/полигона. Новая геометрия имеет меньше узлов, чем старая.

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

Если родительский объект был линией из двух точек, в новой геометрии может остаться только одна. И так как линий из одного узла не бывает, объект автоматически становится точкой.

Редактирование отношений

Благодаря существованию отношений, мы можем объединять объекты в группы и назначать им общие свойства — таким образом, мы можем смоделировать любой возможный объект на карте: границы региона (как группу линий и точек), маршрут автобуса и т.п. Каждый участник отношения имеет свою особую роль. Этот модуль достаточно хорошо поддерживает работу с отношениями и позволяет их изучать, создавать, обновлять и удалять.

Изучение отношений

Чтобы увидеть свойства отношения, нужно сначала определить одного из его участников. После этого, откройте вкладку Отношения в панели объектов. Ввеху вкладки расположен список отношений, частью которых является выбранный объект. Выберите одно из них, которое нужно изучить, снизу появится информация. В первой таблице «Теги отношения» показываются свойства выбранного отношения. В таблице «Участники отношения» можно найти информацию об участниках. Если выбрать одного из них, плагин подсветит его на карте.

Создание отношения

Существует два пути создания отношения:

  1. Можно использовать инструмент osm_createRelation Создать отношение, кнопка которого находится на панели объектов.

  2. Можно создать отношение на вкладке Отношения панели объектов, используя кнопку osm_addRelation Добавить отношение.

В обоих случаях появится новый диалог. Во втором случае, текущий объект автоматически станет первым членом отношения. При создании отношения сначала укажите его тип. Можно выбрать один из предустановленных типов или задать свой. После этого добавьте остальных участников отношения и задайте теги.

Если тип отношения уже выбран, попробуйте использовать кнопку osm_generateTags Сгенерировать теги. Она автоматически создаст набор тегов, как правило, соответствующих выбранному типу. Затем нужно ввести соответствующие значения для ключей. Выбрать участников отношения можно либо вводом их идентификаторов, типов и ролей, либо использованием инструмента osm_identify Идентифицировать и указанием их на карте.

После того как тип, теги и участники отношения выбраны, можно дать команду [Создать отношение].

Изменение отношений

Если нужно изменить существующее отношение, его сначала нужно идентифицировать (как это сделать объясняется в секции Изучение отношений). После этого, нажмите на кнопку osm_editRelation Редактировать отношение. Отношение появится в панели объектов. Появится новый диалог, похожий на диалог создания отношения. Окно будет заполнено значениями из выбранного отношения. В нём можно изменять теги, участников и тип отношения.

Загрузка данных OSM

Для загрузки данных с сервера OpenStreetMap нажмите на кнопку osm_download Загрузить данные. Если кнопки не видно, возможно, не включена панель инструментов модуля. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки появится диалоговое окно со следующими функциями:

Figure OpenStreetMap 6:

../../../_images/osm_downloaddialog.png

Окно загрузки данных OSM

Охват: Определяет географический охват загружаемых данных в виде диапазонов широт и долгот. Поскольку существуют определенные ограничения на максимальный объём загружаемых данных, диапазоны координат не могут быть слишком широкими. Подробная информация об ограничениях доступна по нажатию кнопки osm_questionMark Помощь справа.

Загрузить в: Здесь указывается пусть к файлу, где будут сохранены данные. Для указания другого пути можно использовать кнопку browsebutton.

Открыть данные сразу после загрузки: Определяет, должны ли данные быть открыты сразу после загрузки. Если загруженные данные надо открыть позже, это можно сделать, нажав кнопку osm_load Загрузить данные из файла.

Заменить текущие данные: Эта опция активна, только если включено radiobuttonon Открыть данные сразу после загрузки. Включение этого переключателя приведет к тому, что загруженные данные заменят текущие. Слои данных будут удалены и вместо них будут загружены новые. При первом запуске QGIS и модуля эта опция будет неактивна, так как пока нечего заменять.

Использовать пользовательский рендерер: Эта опция активна, только если включено radiobuttonon Открыть данные сразу после загрузки. Эта опция определяет насколько детализированной будет карта. Существует три стиля. Используйте «Мелкий масштаб», если вам нужно работать с данными с низкой детализацией. Если нужно больше деталей, используйте «Средний масштаб» или «Крупный масштаб». QGIS 2.0 не поддерживает динамическую смену стиля отрисовки.

Нажмите кнопку [Загрузить], чтобы начался процесс загрузки.

Индикатор прогресса будет показывать состояние процесса загрузки. Если возникнет ошибка, появится окно, объясняющее ее причину. После успешного завершения индикатор прогресса и диалоговое окно закроются.

Выгрузка данных

Обратите внимание, что выгрузка всегда делается для текущего слоя. Перед открытием диалога выгрузки убедитесь, что выбран правильный слой.

Для загрузки текущих данных на сервер OSM нажмите кнопку osm_upload Выгрузить данные. Если кнопки не видно, возможно, не включена панель инструментов модуля. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки [Выгрузить] появится диалоговое окно.

Figure OpenStreetMap 7:

../../../_images/osm_uploaddialog.png

Окно выгрузки данных OSM

В верхней части окна можно проверить, те ли данные выгружаются по указываемой там текущей базе данных. В таблице можно найти информацию по тому, сколько изменений будет выгружено. Статистика показывается отдельно для каждого типа объектов.

В поле Комментарий для ваших изменений можно оставить краткое описание изменений или не заполнять поле вообще. Заполните поля Учётная запись OSM, чтобы сервер вас узнал. Если у вас нет учётной записи в OSM — заведите ее по адресу http://www.openstreetmap.org. После того, как все готово, нажмите [Выгрузить], чтобы началась выгрузка данных.

Сохранение данных

Чтобы сохранить данные текущего охвата карты в файл XML, нажмите на кнопку osm_save Сохранить в файл. Если кнопки не видно, возможно, не включена панель инструментов плагина. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки появится диалоговое окно.

Figure OpenStreetMap 8:

../../../_images/osm_savedialog.png

Окно сохранения

Выберите объекты, которые нужно сохранить в файл XML и его имя. Нажмите [OK] для начала процесса. Результатом будет файл XML, содержащий данные OSM с текущим охватом карты. Данные сохраняются в формате версии 0.6. Некоторые элементы (<node>, <way>, <relation>) не содержат информации о пакетах изменений и uid. Эта информация не является обязательной (см. DTD для OSM XML версии 0.6). Выходные данные не сортируются.

Обратите внимание, что данные сохраняются в файл не строго по охвату. Если в охват попадает только часть линии или полигона, они все равно сохраняются целиком. Для каждой линии/полигона сохраняются все её участники.

Импорт данных

Чтобы импортировать данные из открытого векторного не-OSM слоя, нужно: Выбрать текущие данные OSM, щелкнув на один из его слоёв. Выбрать инструмент osm_import Импортировать данные из слоя. Если такой кнопки нет, возможно, не включена панель инструментов модуля. Её можно включить обратно в Настройки ‣ Панели ‣ OpenStreetMap.

После нажатия может появиться следующее окно:

Figure OpenStreetMap 9:

../../../_images/osm_importdialog.png

Сообщение об импорте данных

В этом случае не было загружено векторных слоёв. Загрузите один или несколько слоёв, чтобы их можно было импортировать. Попробуйте нажать кнопку еще раз (не забудьте отметить текущий слой данных OSM):

Figure OpenStreetMap 10:

../../../_images/osm_importtoosmdialog.png

Окно импорта данных

Нажмите ОК, чтобы начать процесс импорта. Или закройте диалог если не уверены в том, что хотите импортировать данные.