Лекция 1. Теория. Устройство карты OpenStreetMap (OSM)

картостили, фигуры, атрибуты, рельеф, POI

Центр Санкт-Петербурга на карте OpenStreetMap

Что такое OpenStreetMap

В наше время, без преувеличения, все существующие цифровые карты делятся на “OpenStreetMap” (её название обычно сокращают до OSM) и “всё остальное”. Причина в том, что OSM — это единственные карты, к внутреннему устройству которых у нас есть полный доступ. Для всех остальных карт можно получить только готовую картинку с нарисованной картой. Для карты OpenStreetMap эту готовую картинку тоже можно получить, но куда важнее, что можно посмотреть, проанализировать и даже изменить исходную базу данных объектов, на основе которой потом автоматически формируется готовая картинка с картой.

Больше того, алгоритмов, формирующих картинку на основании одной и той же базы объектов существует много (полезных —меньше). Они называются “картостилями”. То, что обыватель привык считать, собственно, картой OpenStreetMap.org, на самом деле всего лишь один из картостилей — картостиль Mapnik. И он отображает далеко не все объекты, которые внесены в базу картографических объектов. Существуют сайты, на которых можно увидеть результат работы и других картостилей.

Один и тот же участок карты OSM, отрисованный картостилями Mapnik, OpenTopo и Public Transport

На самом деле, карта OSM — это не красивая картинка, как большинство привыкло думать. OSM — это база картографических объектов. База первична, картинка (или, как мы теперь знаем, картинки) формируются на её основе. Давайте поподробнее разберемся, как эта база устроена, это позволит нам лучше понять возможности, ограничения и способы использования карты OSM.


Устройство OSM

Все объекты на карте делятся на четыре типа: Точка, Линия, Полигон и Составной объект.

Объект Точка — это точка. Пара координат “широта-долгота”, указанных с точностью до нескольких сантиметров. Обычно такая точность избыточна, но при необходимости можно обозначить координаты объектов с очень высокой точностью.

Объект “уличный стол для пикника” (Точка) на карте Mapnik и в базе OSM

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

Объект “дорога местного значения” (Линия) на карте Mapnik и в базе OSM

Объект Полигон — это замкнутый многоугольник. По сути, это просто замкнутая ломанная линия, но тут идеологическое отличие. Линия — это линия. А многоугольник — это площадь. Поэтому линиями обозначаются протяжённые объекты (реки, дороги, границы, заборы), а полигонами — объекты, имеющие площадь (здания, огороженные территории, озёра, участки леса). В некоторых случаях, впрочем, можно обозначить полигон и как линейный объект, так, например, полигон, обозначающий территорию парковки можно обозначить сразу и как парковку и как забор. Описание “парковка” будет распространяться на территорию внутри полигона, а описание “забор” — на его периметр.

Объект “здание” (Полигон) на карте Mapnik и в базе OSM

Четвертый тип объекта — Составной (в терминологии OSM этот тип объектов называется “Отношение”/”Relation”). Сам по себе такой объект не содержит ни одной точки и ни одной линии. Но в его состав можно включать другие объекты.

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

Объект автобусный маршрут (Отношение) на карте Public Transport и в базе OSM

Более сложный пример: территории с дырками внутри. Например, у нас есть лес, внутри леса есть поляна. Поляна внутри леса, но она не часть леса. Чтобы нарисовать такой лес, мы сначала рисуем Полигон-границу леса (важно, что сам по себе мы этот внешний Полигон никак не атрибутируем, он имеет смысл только как часть Составного объекта). Затем рисуем полигон-поляну внутри этого леса. Затем создаём составной объект и назначаем ему внешний Полигон в качестве внешней границы (“outer”), а внутренний Полигон в качестве внутренней границы (“inner”). Если после этого мы при помощи атрибутов опишем этот составной объект как “лес” — на карте получится лес с дыркой внутри.

Объект “лес с дыркой” (Отношение) на карте Mapnik и в базе OSM

Объединение и пересечение линий. Когда мы рисуем линию на карте, добавляя к ней новые точки, если мы очередную точку поставим близко к другой линии, новая линия приклеивается к существующей, и обе линии получают общую точку — пересечение. Так создаются перекрёстки.

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

В общем случае, пересекающимся линиям вовсе не обязательно иметь общую точку. Таким образом создаются, например, мосты и тоннели, где дороги пересекаются на разных уровнях и не имеют перекрёстка. Кроме того, две пересекающиеся линии вообще могут описывать объекты разных типов, например, шоссе и пересекающую его высоковольтную линию. Нет никакого смысла делать у этих линий общую точку.

Пересечения: пересечение двух улиц (общая точка есть), пересечение шоссе с ЛЭП (общей точки нет)

С геометрией, в принципе, всё. Теперь с обозначениями объектов.

Все четыре вышеперечисленные вида геометрических фигур могут иметь атрибуты (тэги), перечень строк вида “атрибут=значение”. Этих пар “атрибут-значение” у любого объекта может быть сколько угодно (хотя обычно не больше пяти), и именно их сочетание определяет, что за объект обозначен этой фигурой на карте. Так, например, если мы нарисуем Полигон и добавим ему атрибут building=yes, он станет зданием. А если дополнительно добавим атрибут shop=supermarket, он станет не просто зданием, а зданием супермаркета.

Если геометрический объект не имеет никаких атрибутов и не входит ни в один составной объект, то он ничего не значит и на карте сам по себе никак потом не отрисовывается. Таковыми “пустыми” объектами являются, к примеру, большинство Точек нарисованного забора. Сам-то забор является геометрической фигурой типа Линия с атрибутом “забор”, а вот входящие в него объекты-Точки только придают ему форму и ничего не обозначают. Но могут и обозначать. Например, вы можете выбрать нужную Точку забора и добавить ей атрибут “ворота=да”. Эта Точка тут же станет точкой въезда и будет обозначаться на карте значком “ворота”.

Забор и точка с воротами в этом заборе: на карте и в базе OSM

По большому счёту, все атрибуты объектов делятся на три категории: определяющие (определяют общий тип объекта: например, дорога это, река или забор), уточняющие (уточняют подвид объекта: переулок или шоссе) и не обязательные (например, название улицы, номер дома или тип дорожного покрытия). Какие-то атрибуты обязаны иметь значением конкретный вариант из ограниченного списка (например атрибут, описывающий материал дорожного покрытия), какие-то атрибуты могут иметь произвольное значение (например, названия улиц), значения некоторых атрибутов обязательно должны быть заданы в виде числа (например, количество этажей здания). Есть уточняющие атрибуты вида “мост=да” или “тоннель=да”, они поясняют, что этот отрезок дороги/ручья проходит по мосту/в тоннеле/в трубе.

Вот и вся премудрость.

Очень важно понять, что это всё. Это и есть вся карта OSM. Она в основе очень просто устроена. Всего четыре типа объектов, каждому из которых можно назначить произвольное количество описывающих их атрибутов.

Но, конечно, OSM это не только геометрические объекты с атрибутами. Это ещё и громадные таблицы, которые перечисляют, какими сочетаниями атрибутов следует обозначать больницы, переулки, церкви, парки, магазины, обрывы, съезды с шоссе, автобусные остановки, тротуары и т.п. Сотни различных объектов, для каждого из которых может быть с десяток необязательных уточняющих атрибутов.

Да, иногда для описания простого, казалось бы, объекта, атрибутов требуется перечислить неожиданно много. Например, церковь обозначается как территория, для которой заданы свойства: Назначение=Объект поклонения, Религия=Христианство, Течение=Православие (amenity=place_of_worship + religion=christian + denomination=russian_orthodox).

Но и в этих гигантских таблицах всё сводится всё к тем же “определяющему, уточняющему и дополнительным” атрибутам простой геометрической фигуры.

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


Чего нет в базе OSM. Рельеф

Традиционно рельеф принято обозначать на карте кольцами изолиний и затенением на юго-восточном склоне холмов (в идеале используются оба варианта одновременно). Но в базе OSM ничего нет про холмы и рельеф. За исключением особых случаев (обрывы, овраги, точки горных вершин, точки перевалов), гор и холмов в картографической базе нет. Поэтому если рисовать только то, что есть в базе, карта выглядит абсолютно плоской. На равнине это не критично, а вот в горах, конечно, катастрофа, потому что такая карта создаёт совершенно неправильное представление о местности. Рельеф — очень важная составляющая карты.

Один и тот же участок горной местности на картах: картостиль Mapnik (данные OSM, высот нет), картостиль OpenTopo (данные OSM, высоты визуализированы по данным SRTM) и нарисованная вручную топографическая карта Генштаба

Картостили, которые умеют отображать на карте рельеф, берут информацию о рельефе не из базы OSM. Рельеф на средне- и крупномасштабных картах в настоящее время в большинстве случаев отображается с помощью базы данных данных высот SRTM или ASTER GDEM. Разрешение этих данных (безе SRTM 90 м/пиксель, база ASTER GDEM 30 м/пиксель) позволяет, при должной обработке, показывать особенности рельефа примерно до 15 зума. В силу меньшей зашумлённости, данные SRTM дают более адекватное представление о рельефе, однако севернее 60° с.ш. и южнее 54° ю.ш. данные SRTM отсутствуют, что вынуждает в конечном итоге использовать оба набора данных при визуализации рельефа на территориях, выходящих за границы покрытия SRTM.

SRTM и ASTER DEM — это названия двух экспериментов по измерению формы земного рельефа с орбиты. Такие эксперименты проводились неоднократно и разными странами, но только результаты тех, в которых принимала участие NASA попали в открытый доступ, распространяются без ограничений и активно используются некоммерческими проектами, типа OpenStreetMap. Это связано с законами США, по которым все результаты невоенных проектов государственных агентств (одним из которых является NASA) получают статус Public Domain (народное достояние) и должны в полном объёме предоставляться общественности.

SRTM (Shuttle Radar Topography Mission) — это проект NASA. В 2000 г. с борта Space Shuttle “Индевор” была проведена радарная интерферометрическая съемка поверхности земного шара. Съемка охватила почти всю территорию Земли между 60° с.ш. и 56° ю.ш. По результатам съемки была создана цифровая модель рельефа почти 80% поверхности Земли. Данные SRTM существуют в нескольких версиях: предварительной (SRTM1, 2003 г.) и окончательной (SRTM2, 2005 г.). Окончательная версия прошла дополнительную обработку, выделение береговых линий и водных объектов, фильтрацию ошибочных значений.

Проект SRTM, размещение локатора SAR в грузовом отсеке летающего вверх ногами шаттла

Более поздний проект 2010 года ASTER GDEM (Global Digital Elevation Model) разработан совместно METI (Ministry of Economy, Trade, and Industry of Japan) и NASA, и выполнен на основе данных сенсора ASTER картографического спутника Terra. Сенсор осуществлял стереоскопическую съемку вдоль полосы пролета с помощью двух телескопов, снимающих в надир и назад в ближнем инфракрасном диапазоне с c разрешением 15 м. Для создания цифровой базы высот ASTER GDEM была выполнена автоматическая компьютерная обработка всего отснятого массива фотографий, 1,5 млн стереопар. Полученный массив данных о высотах охватывает территорию Земли между 83° с.ш. и 83° ю.ш. (99% поверхности земного шара). В 2011 г. была создана улучшенная версия базы высот— ASTER GDEM 2: заполнены пропуски, исправлены ошибки измерения. Для заполнения некорректно отснятых участков использовались результаты более ранних проектов SRTM, CDED (Canada digital elevation data) и Alyaska DEM.

Проект ASTER GDEM: Схема работы датчиков ASTER и внешний вид спутника Terra

К сожалению, картостиль Mapnik рельеф не отображает никак. Это один из главных его недостатков.


POI — точки интереса

Одна из важных составляющих карты OSM — это т.н. POI (Points of Interest), точки интереса. По сути, это просто различные отмеченные на карте объекты, типа магазинов, АЗС, больниц, источников воды, закусочных, памятников, музеев, театров, мест с хорошим видом и т.п. (общий список типов POI насчитывает почти сотню разновидностей).

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

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

Сайт openstreetmap.ru (не путать с openstreetmap.org), инструмент показа точек POI

К списку лекций: Оглавление

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade