OSMInfo - получение информации об объектах в точке или облачная идентификация: различия между версиями
(не показано 18 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Статья|Опубликована|osminfo}} | |||
{{Аннотация|Описание дополнения QGIS для получения списка объектов в указанной точке и идентификации на основании данных OpenStreetMap}} | |||
{{NextGIS}} | |||
==Введение== | ==Введение== | ||
Если вы при работе с ГИС часто меняете локации и имеете дело с большим разнообразием объектов, то наверняка вы сталкивались со следующими вопросами (в любой последовательности). | Если вы при работе с ГИС часто меняете локации и имеете дело с большим разнообразием объектов, то наверняка вы сталкивались со следующими вопросами (в любой последовательности). | ||
1. Географический контекст | 1. Географический контекст объекта — "Где это?" | ||
Несмотря на то, что | Несмотря на то, что всё в ГИС имеет координаты, 99.9% пользователей не умеют превращать их в географическое описание в уме. Поэтому значительную часть времени при работе с ГИС мы тратим на то, чтобы понять географический контекст объекта. Вы открыли слой с некими объектами, приблизились к одному из них, возникает первый вопрос: "Где он находится?". Обычно мы отвечаем на этот вопрос, подгружая дополнительные слои с административно-территориальным делением: границами стран, областей, районов и т.д., много раз меняем масштаб, пока не получим нужное понимание контекста. | ||
[[Файл:Osminfo-02.png|574px|thumb|center|Где это?]] | [[Файл:Osminfo-02.png|574px|thumb|center|Где это?]] | ||
2. Идентификация объекта | 2. Идентификация объекта — "Что это?" | ||
Окей, вы загрузили данные и знаете где находится объект | Окей, вы загрузили данные и знаете где находится объект. Теперь вам нужно понять, что представляет собой этот объект. Стандартным способом ответа на этот вопрос является так называемая идентификация. В любых настольных ГИС есть способ щелкнуть по объекту и посмотреть про него информацию, содержащуюся в атрибутивной таблице. Однако, это не поможет, если таблица атрибутов не содержит нужную вам информацию. Или вы вообще работаете с изображениями, поэтому для ГИС там нет никаких объектов, и, соответственно, нет таблицы атрибутов. | ||
[[Файл:Osminfo-03.png|681px|thumb|center|Как называется это озеро?]] | [[Файл:Osminfo-03.png|681px|thumb|center|Как называется это озеро?]] | ||
Распространенный вариант последнего случая — скрытие (или, точнее, недораскрытие) информации рендерером (программой, отрисовывающей вектор в растр). Понятно, что информации об объекте часто гораздо больше, чем можно показать графически, поэтому создателями базовых картографических подложек информация показывается выборочно. В результате мы мучаемся с тем, что не показывает стандартный стиль OSM, MapQuest или любая другая растровая подложка на базе OpenStreetMap. | |||
[[Файл:Osminfo-01.png|620px|thumb|center|Какой номер дома у Гагаринского военкомата?]] | [[Файл:Osminfo-01.png|620px|thumb|center|Какой номер дома у Гагаринского военкомата?]] | ||
Строго говоря, ничего нового ни в этих вопросах, ни в предлагаемых здесь инструментах нет. Инструменты "сквозной идентификации" (ищущие везде) как способ эффективно работать с тысячами слоёв в ГИС появились довольно давно и примерно так же давно появилась возможность хранить и работать с геоданными в удаленных базах данных. Однако, удобные универсальные механизмы и сервисы идентификации для действительно массового использования не могли появиться, поскольку не было универсальных баз геоданных. Время пришло. | |||
==Идея== | ==Идея== | ||
Время, которое мы тратим на ответы на вопросы выше можно было бы существенно сократить, если бы | Время, которое мы тратим на ответы на вопросы выше, можно было бы существенно сократить, если бы по аналогии с обычной идентификацией у нас был инструмент "облачной" идентификации, посылающий запросы к некой общедоступной базе географических данных. Такой сервис позволил бы в любой точке получить структурированную информацию по объектам в этой точке и его окружению без необходимости подгружать дополнительные слои или изменять масштабы отображения. | ||
К счастью, подобная база данных существует и называется [http://osm.org OpenStreetMap]. Более того, существует и сервис позволяющий отправлять запросы к этой базе и получать ответы | К счастью, подобная база данных существует и называется [http://osm.org OpenStreetMap]. Более того, существует и сервис, позволяющий отправлять запросы к этой базе и получать ответы — [http://overpass-turbo.eu Overpass API]. Нам осталось только создать удобный инструмент отправки и получения результатов и их представления в удобной форме. | ||
==Реализация== | ==Реализация== | ||
Строка 27: | Строка 34: | ||
В процессе работы нам нужно отправлять три запроса к [http://overpass-api.de/api/interpreter интерпретатору Overpass]: | В процессе работы нам нужно отправлять три запроса к [http://overpass-api.de/api/interpreter интерпретатору Overpass]: | ||
1. Близкие объекты (nearby features) | 1. Близкие объекты (nearby features) — запрос ''around'': | ||
<pre>[timeout:30][out:json];(node(around:DIST,LAT,LON);way(around:DIST,LAT,LON));out tags geom;relation(around:DIST,LAT,LON);</pre> | <pre>[timeout:30][out:json];(node(around:DIST,LAT,LON);way(around:DIST,LAT,LON));out tags geom;relation(around:DIST,LAT,LON);</pre> | ||
Строка 33: | Строка 40: | ||
Этот запрос позволяет отправить координаты и расстояние и найти объекты в которые входит точка, так как точно попасть в линию или точку практически невозможно, так же используется параметр расстояние. | Этот запрос позволяет отправить координаты и расстояние и найти объекты в которые входит точка, так как точно попасть в линию или точку практически невозможно, так же используется параметр расстояние. | ||
2. Объекты, охватывающие точку (enclosing features) | 2. Объекты, охватывающие точку (enclosing features) — запрос ''is_in'': | ||
<pre>[timeout:30][out:json];is_in(LAT,LON)->.a;way(pivot.a);out tags geom;relation(pivot.a);out tags bb;</pre> | <pre>[timeout:30][out:json];is_in(LAT,LON)->.a;way(pivot.a);out tags geom;relation(pivot.a);out tags bb;</pre> | ||
Строка 45: | Строка 52: | ||
Запрос выше возвращает перечень отношений, но не отдает их геометрии, поэтому нужен еще один запрос, чтобы получить и геометрии тоже. | Запрос выше возвращает перечень отношений, но не отдает их геометрии, поэтому нужен еще один запрос, чтобы получить и геометрии тоже. | ||
==Модуль OSMInfo== | |||
''OSMInfo'' — это модуль для QGIS, который реализует эти запросы прозрачно для пользователя. | |||
OSMInfo | ===Пользовательский интерфейс=== | ||
OSMInfo добавляет новый инструмент идентификации: | |||
[[Файл:Osminfo-06.png|center]] | [[Файл:Osminfo-06.png|center]] | ||
Щелкнув таким инструментом в нужном месте можно получить полную информацию по объектам располагающимся в месте щелчка (место подсвечивается цветом): | Щелчок инструментом возвращает координаты с карты (умеет работать с разными системами координат) и выводит результаты поиска объектов в окрестности этой точки в дерево объектов. | ||
[[Файл:Osminfo-07.png|329px|thumb|center|Результаты идентификации]] | |||
Щелкнув таким инструментом в нужном месте, можно получить полную информацию по объектам, располагающимся в месте щелчка (место подсвечивается цветом): | |||
[[Файл:Osminfo-04.png|574px|thumb|center|Храм с набором атрибутов]] | [[Файл:Osminfo-04.png|574px|thumb|center|Храм с набором атрибутов]] | ||
И не важно, если эти объекты в проекте или это просто их растровое представление | И не важно, если эти объекты уже присутствуют в проекте в векторном виде, или это просто их растровое представление. Нужны только координаты щелчка: | ||
[[Файл:Osminfo-05.png|574px|thumb|center|Щелчок по темному объекту на снимке позволяет увидеть, что это пруд "Жостовский карьер"]] | [[Файл:Osminfo-05.png|574px|thumb|center|Щелчок по темному объекту на снимке позволяет увидеть, что это пруд "Жостовский карьер"]] | ||
Все объекты деляется на две группы: "Ближайшие" и "Входит в". | |||
===Геометрии=== | |||
Кроме атрибутивной информации, OSMInfo также извлекает и показывает геометрии объектов в дереве результатов. Для того, чтобы их увидеть, нужно просто щелкнуть по одному из объектов. Соответствующая ему геометрия появится прямо на карте. Щелкать можно и по объектам из группы "Ближайшие", и по отношениям в группе "Входит в". Геометрии выводятся во временный слой. Сохранять их пока никуда нельзя. | |||
[ | [[Файл:Osminfo-08.png|750px|thumb|center|Результаты идентификации, геометрия одного из ближайших объектов "ТК Сенная" подсвечена на карте зеленым.]] | ||
Масштабирования на объект по умолчанию не происходит. Если это необходимо, можно щелкнуть правой кнопкой на объект в дереве результатов и выбрать в меню "Приблизить к объекту". | |||
===Отличия от Query Features на osm.org=== | ===Отличия от Query Features на osm.org=== | ||
Аналогичным инструментом так же можно воспользоваться на сайте OpenStreetMap — Query Features ([http://www.openstreetmap.org/query?lat=55.75382&lon=37.62927#map=17/55.75410/37.63205 пример]). | |||
Основные отличия OSMInfo от Query Features: | Основные отличия OSMInfo от Query Features: | ||
* Query Features это функция страницы osm.org со всеми ограничениями, например вы не можете загрузить туда свои данные, OSMInfo | * ''Query Features'' — это функция страницы osm.org со всеми ограничениями, например вы не можете загрузить туда свои данные, OSMInfo — плагин для QGIS. | ||
* В отличие от Query Features, OSMInfo сразу показывает геометрии для отношений | * В отличие от Query Features, OSMInfo сразу показывает геометрии для отношений (в Query Features нужно открывать отдельные страницы для каждого отношения). | ||
* | |||
===Ограничения=== | |||
Некоторые ограничения модуля являются ограничениями Overpass API: | |||
* Полигоны без названия (не заполнен тег name) не считаются в Overpass полигонами и не будут присутствовать в списках объектов ([http://wiki.openstreetmap.org/wiki/Overpass_API/Areas подробнее]) | |||
== Контакты == | |||
Если вы нашли ошибку, или у вас есть предложения по улучшению расширения — воспользуйтесь [https://github.com/nextgis/osminfo/issues трекером]. Кроме того, вопросы по использованию расширения можно задать авторам [http://nextgis.ru/contact/ напрямую]. |
Текущая версия от 06:41, 18 января 2016
по адресу http://gis-lab.info/qa/osminfo.html
Описание дополнения QGIS для получения списка объектов в указанной точке и идентификации на основании данных OpenStreetMap
Создано в | Веб ГИС для вашей организации по доступной цене |
Введение
Если вы при работе с ГИС часто меняете локации и имеете дело с большим разнообразием объектов, то наверняка вы сталкивались со следующими вопросами (в любой последовательности).
1. Географический контекст объекта — "Где это?"
Несмотря на то, что всё в ГИС имеет координаты, 99.9% пользователей не умеют превращать их в географическое описание в уме. Поэтому значительную часть времени при работе с ГИС мы тратим на то, чтобы понять географический контекст объекта. Вы открыли слой с некими объектами, приблизились к одному из них, возникает первый вопрос: "Где он находится?". Обычно мы отвечаем на этот вопрос, подгружая дополнительные слои с административно-территориальным делением: границами стран, областей, районов и т.д., много раз меняем масштаб, пока не получим нужное понимание контекста.
2. Идентификация объекта — "Что это?"
Окей, вы загрузили данные и знаете где находится объект. Теперь вам нужно понять, что представляет собой этот объект. Стандартным способом ответа на этот вопрос является так называемая идентификация. В любых настольных ГИС есть способ щелкнуть по объекту и посмотреть про него информацию, содержащуюся в атрибутивной таблице. Однако, это не поможет, если таблица атрибутов не содержит нужную вам информацию. Или вы вообще работаете с изображениями, поэтому для ГИС там нет никаких объектов, и, соответственно, нет таблицы атрибутов.
Распространенный вариант последнего случая — скрытие (или, точнее, недораскрытие) информации рендерером (программой, отрисовывающей вектор в растр). Понятно, что информации об объекте часто гораздо больше, чем можно показать графически, поэтому создателями базовых картографических подложек информация показывается выборочно. В результате мы мучаемся с тем, что не показывает стандартный стиль OSM, MapQuest или любая другая растровая подложка на базе OpenStreetMap.
Строго говоря, ничего нового ни в этих вопросах, ни в предлагаемых здесь инструментах нет. Инструменты "сквозной идентификации" (ищущие везде) как способ эффективно работать с тысячами слоёв в ГИС появились довольно давно и примерно так же давно появилась возможность хранить и работать с геоданными в удаленных базах данных. Однако, удобные универсальные механизмы и сервисы идентификации для действительно массового использования не могли появиться, поскольку не было универсальных баз геоданных. Время пришло.
Идея
Время, которое мы тратим на ответы на вопросы выше, можно было бы существенно сократить, если бы по аналогии с обычной идентификацией у нас был инструмент "облачной" идентификации, посылающий запросы к некой общедоступной базе географических данных. Такой сервис позволил бы в любой точке получить структурированную информацию по объектам в этой точке и его окружению без необходимости подгружать дополнительные слои или изменять масштабы отображения.
К счастью, подобная база данных существует и называется OpenStreetMap. Более того, существует и сервис, позволяющий отправлять запросы к этой базе и получать ответы — Overpass API. Нам осталось только создать удобный инструмент отправки и получения результатов и их представления в удобной форме.
Реализация
Запросы к Overpass API
В процессе работы нам нужно отправлять три запроса к интерпретатору Overpass:
1. Близкие объекты (nearby features) — запрос around:
[timeout:30][out:json];(node(around:DIST,LAT,LON);way(around:DIST,LAT,LON));out tags geom;relation(around:DIST,LAT,LON);
Этот запрос позволяет отправить координаты и расстояние и найти объекты в которые входит точка, так как точно попасть в линию или точку практически невозможно, так же используется параметр расстояние.
2. Объекты, охватывающие точку (enclosing features) — запрос is_in:
[timeout:30][out:json];is_in(LAT,LON)->.a;way(pivot.a);out tags geom;relation(pivot.a);out tags bb;
Этот запрос возвращает в том числе отношения которые географически охватывают переданную точку.
3. Геометрии для отношений
[out:json];rel(RELATION_ID);out geom;
Запрос выше возвращает перечень отношений, но не отдает их геометрии, поэтому нужен еще один запрос, чтобы получить и геометрии тоже.
Модуль OSMInfo
OSMInfo — это модуль для QGIS, который реализует эти запросы прозрачно для пользователя.
Пользовательский интерфейс
OSMInfo добавляет новый инструмент идентификации:
Щелчок инструментом возвращает координаты с карты (умеет работать с разными системами координат) и выводит результаты поиска объектов в окрестности этой точки в дерево объектов.
Щелкнув таким инструментом в нужном месте, можно получить полную информацию по объектам, располагающимся в месте щелчка (место подсвечивается цветом):
И не важно, если эти объекты уже присутствуют в проекте в векторном виде, или это просто их растровое представление. Нужны только координаты щелчка:
Все объекты деляется на две группы: "Ближайшие" и "Входит в".
Геометрии
Кроме атрибутивной информации, OSMInfo также извлекает и показывает геометрии объектов в дереве результатов. Для того, чтобы их увидеть, нужно просто щелкнуть по одному из объектов. Соответствующая ему геометрия появится прямо на карте. Щелкать можно и по объектам из группы "Ближайшие", и по отношениям в группе "Входит в". Геометрии выводятся во временный слой. Сохранять их пока никуда нельзя.
Масштабирования на объект по умолчанию не происходит. Если это необходимо, можно щелкнуть правой кнопкой на объект в дереве результатов и выбрать в меню "Приблизить к объекту".
Отличия от Query Features на osm.org
Аналогичным инструментом так же можно воспользоваться на сайте OpenStreetMap — Query Features (пример).
Основные отличия OSMInfo от Query Features:
- Query Features — это функция страницы osm.org со всеми ограничениями, например вы не можете загрузить туда свои данные, OSMInfo — плагин для QGIS.
- В отличие от Query Features, OSMInfo сразу показывает геометрии для отношений (в Query Features нужно открывать отдельные страницы для каждого отношения).
Ограничения
Некоторые ограничения модуля являются ограничениями Overpass API:
- Полигоны без названия (не заполнен тег name) не считаются в Overpass полигонами и не будут присутствовать в списках объектов (подробнее)
Контакты
Если вы нашли ошибку, или у вас есть предложения по улучшению расширения — воспользуйтесь трекером. Кроме того, вопросы по использованию расширения можно задать авторам напрямую.