В последние годы проект OpenStreetMap стал очень популярен, потому что во многих странах свободные геоданные, такие, как, например, дорожная сеть, просто отсутствовали. Цель проекта OSM — создать свободно редактируемую карту всего мира с использованием данных GPS, аэрофотосъемки или просто знания местности. С тем, чтобы поддержать это начинание, QGIS предоставляет модуль, который даёт пользователям возможность работать с данными OSM.
Модуль предоставляет всю базовую функциональность для работы с данными OSM: загрузку данных, импорт, сохранение, скачивание, редактирование и выгрузку обратно на сервер OpenStreetMap. Источником вдохновления при создании модуля послужили другие редакторы данных OSM. Целью авторов модуля было объединение их функциональности и достижение наилучшего результата.
Следующий раздел дает краткое введение в принципы проекта OSM.
Следующие параграфы были частично позаимствованы с веб-сайта OpenStreetMap http://www.openstreetmap.org.
OpenStreetMap — проект, который создаёт свободно редактируемую карту мира. Карта создаётся с помощью GPS, аэрофотоснимков и других источников, а также знания местности. Проект появился потому, что использование большинства карт ограничено законодательно или технически, что сдерживает их творческое использования способами, которые раньше сложно было представить. Как изображения (тайлы),так и векторные данные OSM доступны для загрузки и имеют лицензию Creative Commons Attribution ShareAlike 2.0.
Figure OpenStreetMap 1:
OpenStreetMap был вдохновлен такими проектами, как Wikipedia — на карте сайта (см. рисунок Figure_OpenStreetMap_1) есть большая закладка Редактировать и поддерживается полная история изменений. Зарегистрированные пользователи могут загружать GPS-треки и редактировать векторные данные с помощью различных инструментов.
Структура данных OSM — это класс объектов, которые могут быть сохраненены с помощью API на сервер. Три поддерживаемых типа объектов — это: узлы, линии и отношения.
Узел — пара координат в системе широта/долгота. Он используется для построения других объектов и как объект сам по себе (например Точки интереса — POI), если он снабжен правильной атрибутикой.
Линия — список из минимум двух узлов, которые описывают линейный объект, такой, как улица или что-то наподобие. Узлы могут входить в состав нескольких линий.
Отношение — группа из нуля или более примитивов с назначенными ролями. Оно используется для указания отношений между объектами и может моделировать абстрактный объект.
Этими примитивами задаётся множество различных объектов карты («Точка интереса», «Улица», «Трамвайная линия», «Автобусная остановка» и т.п.). Атрибутика данных хорошо известна постоянным участникам OSM и сохраняется в виде тегов, состоящих из ключа и значения. Данные OSM обычно распространяются в формате XML. XML также используется для обмена информацией с сервером 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:
Панель объектов помогает идентифицировать объекты OSM. Она показывается основную информацию о типе объекта и его идентификаторе, а также информацию о том, кто и когда изменял этот объект. На панели объектов также находятся все инструменты редактирования (в верхней части панели). Инструменты редактирования более подробно освещены в секциях ниже. Сначала панель заблокирована. Она разблокируется после успешной загрузки некоторого количества данных OSM.
Панель отмены/возврата используется для отмены и возврата действий редактирования. На панели располагаются не только классические кнопки отмены и возврата, но и список с кратким описанием предпринятых действий. По умолчанию панель скрыта. Появляется панель после нажатия на соответствующую кнопку на панели объектов.
Первым делом, после запуска модуля нужно открыть какие-то данные OSM. Они могут быть загружены из файла или загружены непосредственно с сервера. Здесь мы расскажем про первый метод.
Для загрузки данных из файла нажмите на кнопку Загрузить данные из файла. Если у вас нет такой кнопки, возможно, у вас скрыта панель объектов модуля. Включите её заново, выбрав Установки ‣ Панели ‣ OpenStreetMap.
Figure OpenStreetMap 3:
Описание элементов диалога даётся ниже.
Загружаемый файл OpenStreetMap: Нажмите на кнопку , чтобы выбрать файл .osm, данные которого необходимы.
Добавить колонки для тегов: Эта опция определяет связь между данными OSM и QGIS. Каждый объект OSM имеет теги (пары ключей и значений), которые определяют свойства объекта. Каждый объект в QGIS также имеет атрибуты (ключ и значение). Эта опция позволяет определить, какие свойства объектов OSM должны быть видны, когда показывается информация об объектах QGIS.
Заменить текущие данные: Включение этой опции означает, что новые данные должны заменить существующие данные, с которыми работает пользователь. Слои текущих данных будут удалены, и будут загружены новые. Когда данные загружаются в первый раз, эта опция не активна, так как заменять пока нечего.
Использовать пользовательский рендерер: Эта опция определяет степень детализации карты. Существует три уровня детализации данных OSM. Используйте «Мелкий масштаб», если вам нужно просматривать данные на уровне региона. Вы также можете использовать «Средний масштаб» или «Крупный масштаб». Версия QGIS 2.0 не поддерживает динамическую смену стиля отрисовки.
Нажмите [Ok], чтобы загрузить данные. Если это первая загрузка файла, то сначала плагин должен обработать базу данных. Это может занять несколько минут или секунд, в зависимости от количества данных.
После того, как данные OSM загружены, вы можете просмотреть информацию по объектам, используя инструмент Определить объекты, расположенную справа в панели объектов OSM. Используя этот инструмент, вы можете легко изучить объекты на карте. Когда курсор мыши наведен на объект, вы можете увидеть всю информацию о нем в панели объектов OSM. Объект также подсвечивается на карте, так что пользователь может видеть, что именно определилось.
Вкладка Свойства панели содержит все теги объекта. Перейдя на вкладку Отношение, можно увидеть список всех отношений, связанных с текущим объектом.
Если вам нужно смотреть на параметры объекта и одновременное перемещать курсор мыши, попробуйте щелкнуть левой кнопкой по объекту. Процесс идентификации приостановится, пока вы не нажмете на левую кнопку мыши снова.
Иногда в месте щелчка левой кнопкой находится более одного объекта. Часто в такую ситуацию можно попасть при щелчке на перекресток, или если масштаб карты невелик. В этой ситуации определяется (и подсвечивается) только один из объектов, но плагин запоминает их все. Потом, в режиме паузы, вы можете пролистать объекты по кругу правой кнопкой.
Слово «базовых» в заголовке секции означает, что речь пойдет о всех примитивах, кроме отношений — узлах и линиях. Если вам нужна информация о редактировании отношений, просто пропустите эту секцию и ознакомьтесь со следующей.
Функции по редактированию базовых данных — основная часть плагина OSM. Вы может изменять свойства, расположение или форму любого примитива. Вы можете удалять объекты и добавлять новые. Все изменения узлов и линий будут запомнены и их можно удобно отменить/вернуть и выгрузить на сервер OpenStreetMap.
Теги объектов можно изменять прямо в таблице тегов, которая располагается в панели объектов. Не забудьте сначала выбрать объект.
Figure OpenStreetMap 4:
Для изменения тега объекта нужно дважды щелкнуть на соответствующей строке колонки «Значение» и ввести нужное значение. Если нужно удалить тег, щелкните по ряду и используйте кнопку Удалить выбранные теги, находящуюся справа внизу таблицы.
Чтобы добавить новый тег, введите ключи и значение в последнюю строку таблицы, где находится надпись «<следующее значение тега>». Отметьте, что вы не можете изменить ключ существующего тега. Для удобства ввода тегов можно использовать подсказывающие выпадающие списки уже заполненные возможными ключами и их значениями.
Для создания точки служит кнопка Создать точку в панели объектов. Выберите этот инструмент и щелкайте им по карте, созданные объекты сразу будут определяться. Если вы щелкните по линии или полигону, будет создана точка на линии и полигоне как их часть. Если курсор находится над существующей точкой, новая точка создана быть не может. В этом случае будет показано следующее сообщение:
Figure OpenStreetMap 5:
Механизм, помогающий пользователю точно попасть в линию или полигон, называется «прилипание», он включен по умолчанию. Если нужно создать точку очень близко к линии, но не на ней, нужно отключить прилипание, нажав клавишу Ctrl.
Для создания линии служит инструмент Создать линию, кнопка которого располагается на панели объектов. Чтобы создать линию, выберите этот инструмент и начните щёлкать левой кнопкой мыши на карте. Каждый из щелчков превратится в узел — часть новой линии. Создание линии завершается, когда вы первый раз щёлкаете правой кнопкой мыши. Линия сразу появится на карте.
Примечание
Линию с менее чем двумя узлами создать невозможно, в случае, если узел один, операция просто игнорируется.
Прилипание работает для всех узлов карты — точек из точечного слоя и всех узлов линейного и полигонального слоёв. Прилипание можно отключить, нажав Ctrl.
Создать полигон можно инструментом Создать полигон, кнопка которого располагается на панели объектов. Для создания полигона выберите инструмент и начните щёлкать левой кнопкой на карте. Каждый из щелчков превратится в узел — часть нового полигона. Создание полигона будет завершено, когда вы первый раз щёлкнете правой кнопкой мыши. Полигон сразу появится на карте. Полигон из менее чем трех узлов создать невозможно. В случае, если узлов меньше трех, операция просто игнорируется. Прилипание работает для всех узлов карты — точек из точечного слоя и всех узлов линейного и полигонального слоёв. Прилипание можно отключить нажав Ctrl.
Если вы хотите передвинуть объект (не важно какого типа), используйте инструмент Перемещение объектов, кнопка которого располагается на панели объектов. Найдите объект, который нужно переместить, наведя на него курсор и щёлкнув по нему. Если выберется не тот объект, не двигайте его, щёлкните правой кнопкой, пока не выберется нужный. После того, как объект выбран и вы переместили курсор, прокручивать объекты больше будет нельзя. Для подтверждения перемещения щёлкните левой кнопкой мыши, для отмены щёлкните правой.
Если вы перемещаете объект, связанный с другими объектами, эти связи не будут нарушены. Другие объекты также могут видоизмениться, чтобы подстроиться к новой позиции перемещенного объекта.
Для этой операции также поддерживается прилипание:
Когда перемещается отдельная точка, не являющаяся частью линии или полигона, осуществляется прилипание ко всем сегментам и узлам.
Когда перемещается точка, являющаяся частью линии или полигона, осуществляется прилипание ко всем сегментам и узлам, кроме узлов родительских объектов.
Когда перемещается линия или полигон, осуществляется прилипание ко всем узлам. Обратите внимание, что модуль пытается выполнить прилипание только к трём ближайшим к курсору узлам, иначе процесс был бы очень медленным. Прилипание можно отключить, удерживая Ctrl в процессе.
Если нужно удалить объект, его сначала нужно идентифицировать. Далее, чтобы его удалить, нужно использовать инструмент Удалить этот объект, кнопка которого расположена на панели объектов. При удалении линии/полигона удаляется сама линия/полигон и все участвующие в ней узлы, которые не принадлежат другой линии/полигону.
При удалении точки, которая является участником другой линии/полигона, точка удаляется и изменяется геометрия родительской линии/полигона. Новая геометрия имеет меньше узлов, чем старая.
Если родительская геометрия является полигоном, состоящим из трех узлов, то у новой остается всего два. И так как полигонов с двумя узлами быть не может, тип объекта автоматически меняется на линию.
Если родительский объект был линией из двух точек, в новой геометрии может остаться только одна. И так как линий из одного узла не бывает, объект автоматически становится точкой.
Благодаря существованию отношений, мы можем объединять объекты в группы и назначать им общие свойства — таким образом, мы можем смоделировать любой возможный объект на карте: границы региона (как группу линий и точек), маршрут автобуса и т.п. Каждый участник отношения имеет свою особую роль. Этот модуль достаточно хорошо поддерживает работу с отношениями и позволяет их изучать, создавать, обновлять и удалять.
Чтобы увидеть свойства отношения, нужно сначала определить одного из его участников. После этого, откройте вкладку Отношения в панели объектов. Ввеху вкладки расположен список отношений, частью которых является выбранный объект. Выберите одно из них, которое нужно изучить, снизу появится информация. В первой таблице «Теги отношения» показываются свойства выбранного отношения. В таблице «Участники отношения» можно найти информацию об участниках. Если выбрать одного из них, плагин подсветит его на карте.
Существует два пути создания отношения:
Можно использовать инструмент Создать отношение, кнопка которого находится на панели объектов.
Можно создать отношение на вкладке Отношения панели объектов, используя кнопку Добавить отношение.
В обоих случаях появится новый диалог. Во втором случае, текущий объект автоматически станет первым членом отношения. При создании отношения сначала укажите его тип. Можно выбрать один из предустановленных типов или задать свой. После этого добавьте остальных участников отношения и задайте теги.
Если тип отношения уже выбран, попробуйте использовать кнопку Сгенерировать теги. Она автоматически создаст набор тегов, как правило, соответствующих выбранному типу. Затем нужно ввести соответствующие значения для ключей. Выбрать участников отношения можно либо вводом их идентификаторов, типов и ролей, либо использованием инструмента Идентифицировать и указанием их на карте.
После того как тип, теги и участники отношения выбраны, можно дать команду [Создать отношение].
Если нужно изменить существующее отношение, его сначала нужно идентифицировать (как это сделать объясняется в секции Изучение отношений). После этого, нажмите на кнопку Редактировать отношение. Отношение появится в панели объектов. Появится новый диалог, похожий на диалог создания отношения. Окно будет заполнено значениями из выбранного отношения. В нём можно изменять теги, участников и тип отношения.
Для загрузки данных с сервера OpenStreetMap нажмите на кнопку Загрузить данные. Если кнопки не видно, возможно, не включена панель инструментов модуля. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки появится диалоговое окно со следующими функциями:
Figure OpenStreetMap 6:
Охват: Определяет географический охват загружаемых данных в виде диапазонов широт и долгот. Поскольку существуют определенные ограничения на максимальный объём загружаемых данных, диапазоны координат не могут быть слишком широкими. Подробная информация об ограничениях доступна по нажатию кнопки Помощь справа.
Загрузить в: Здесь указывается пусть к файлу, где будут сохранены данные. Для указания другого пути можно использовать кнопку .
Открыть данные сразу после загрузки: Определяет, должны ли данные быть открыты сразу после загрузки. Если загруженные данные надо открыть позже, это можно сделать, нажав кнопку Загрузить данные из файла.
Заменить текущие данные: Эта опция активна, только если включено Открыть данные сразу после загрузки. Включение этого переключателя приведет к тому, что загруженные данные заменят текущие. Слои данных будут удалены и вместо них будут загружены новые. При первом запуске QGIS и модуля эта опция будет неактивна, так как пока нечего заменять.
Использовать пользовательский рендерер: Эта опция активна, только если включено Открыть данные сразу после загрузки. Эта опция определяет насколько детализированной будет карта. Существует три стиля. Используйте «Мелкий масштаб», если вам нужно работать с данными с низкой детализацией. Если нужно больше деталей, используйте «Средний масштаб» или «Крупный масштаб». QGIS 2.0 не поддерживает динамическую смену стиля отрисовки.
Нажмите кнопку [Загрузить], чтобы начался процесс загрузки.
Индикатор прогресса будет показывать состояние процесса загрузки. Если возникнет ошибка, появится окно, объясняющее ее причину. После успешного завершения индикатор прогресса и диалоговое окно закроются.
Обратите внимание, что выгрузка всегда делается для текущего слоя. Перед открытием диалога выгрузки убедитесь, что выбран правильный слой.
Для загрузки текущих данных на сервер OSM нажмите кнопку Выгрузить данные. Если кнопки не видно, возможно, не включена панель инструментов модуля. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки [Выгрузить] появится диалоговое окно.
Figure OpenStreetMap 7:
В верхней части окна можно проверить, те ли данные выгружаются по указываемой там текущей базе данных. В таблице можно найти информацию по тому, сколько изменений будет выгружено. Статистика показывается отдельно для каждого типа объектов.
В поле Комментарий для ваших изменений можно оставить краткое описание изменений или не заполнять поле вообще. Заполните поля Учётная запись OSM, чтобы сервер вас узнал. Если у вас нет учётной записи в OSM — заведите ее по адресу http://www.openstreetmap.org. После того, как все готово, нажмите [Выгрузить], чтобы началась выгрузка данных.
Чтобы сохранить данные текущего охвата карты в файл XML, нажмите на кнопку Сохранить в файл. Если кнопки не видно, возможно, не включена панель инструментов плагина. Её можно включить в Настройки ‣ Панели ‣ OpenStreetMap. После нажатия кнопки появится диалоговое окно.
Figure OpenStreetMap 8:
Выберите объекты, которые нужно сохранить в файл XML и его имя. Нажмите [OK] для начала процесса. Результатом будет файл XML, содержащий данные OSM с текущим охватом карты. Данные сохраняются в формате версии 0.6. Некоторые элементы (<node>, <way>, <relation>) не содержат информации о пакетах изменений и uid. Эта информация не является обязательной (см. DTD для OSM XML версии 0.6). Выходные данные не сортируются.
Обратите внимание, что данные сохраняются в файл не строго по охвату. Если в охват попадает только часть линии или полигона, они все равно сохраняются целиком. Для каждой линии/полигона сохраняются все её участники.
Чтобы импортировать данные из открытого векторного не-OSM слоя, нужно: Выбрать текущие данные OSM, щелкнув на один из его слоёв. Выбрать инструмент Импортировать данные из слоя. Если такой кнопки нет, возможно, не включена панель инструментов модуля. Её можно включить обратно в Настройки ‣ Панели ‣ OpenStreetMap.
После нажатия может появиться следующее окно:
Figure OpenStreetMap 9:
В этом случае не было загружено векторных слоёв. Загрузите один или несколько слоёв, чтобы их можно было импортировать. Попробуйте нажать кнопку еще раз (не забудьте отметить текущий слой данных OSM):
Figure OpenStreetMap 10:
Нажмите ОК, чтобы начать процесс импорта. Или закройте диалог если не уверены в том, что хотите импортировать данные.