RU:Appllied Multipolygons/Basics

From OpenStreetMap Wiki
Jump to navigation Jump to search

Внешний контур

Возьмите JOSM и нарисуйте линию, у которой последняя точка совпадает с первой. Пусть на ней будет тег natural=water:

Appmulti1-01-area.gif

Это — полигон, или, как говорят математики, многоугольник. Наличие тега natural=* делает его областью: разница примерно как между окружностью и кругом. Превратить полигон в мультиполигон несложно: нажмите в панели отношений кнопку «создать»:

JOSM-Icon-add.svg

Откроется окно, в котором три панели: теги на отношении, участники отношения (эти две пустые, потому что отношение только что создано) и список выбранных объектов. Волшебная кнопка добавит все выбранные объекты в отношение:

Appmulti1-03-addrel.gif

Теперь нужно заполнить пустые поля. Тег type=multipolygon задаёт тип отношения, очевидно. Больше никаких обязательных тегов для мультиполигона нет. Слева от участников отношения пишутся их роли в этом отношении:

Appmulti1-04-outer.gif

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

Appmulti1-05-multi.gif

Теперь у нас есть правильный мультиполигон. Чем он лучше обычной области? Смотрите, сейчас будет фокус. Выбираем две точки на периметре...

Appmulti1-06-select.gif

И жмём «P» (или выбираем в меню «Инструменты» пункт «Разделить линию»):

Appmulti1-07-split.gif

Теперь это две линии, но мультиполигон остался правильным! На рисунке выбрана одна из них, при этом отмечена вся область мультиполигона. Можно ли так сделать с обычном областью? Давайте проверим:

Appmulti1-08-norel.gif

Ну, если не присматриваться, то выглядит нормально. Правда, если выбрать какую-то линию, открывается ужас, свидетельствующий о некорректности данных. На трёх кусках будет ещё очевиднее. Да, области должны быть замкнутыми линиями, иначе это ошибка. Это — одно из основных свойств мультиполигона: он может состоять из любых кусков, главное — чтобы в сумме они составляли замкнутые контуры.

Рекомендуется не оставлять теги на линиях мультиполигона. В части случаев это вообще будет ошибкой. Давайте перенесём наш natural=water на отношение. Если выбрать одну из линий, под списком тегов будет список отношений, в которых она состоит. Не мудрствуя лукаво, тыкаем в «Правку»:

Appmulti1-09-edit.gif

И добавляем тег воды на отношение:

Appmulti1-10-tags.gif

Обратите внимание, что в отношении уже два члена. Умный JOSM при разделении линии, создав вторую её часть, автоматически добавил её в те же отношения, в которых была вся линия. В сложных случаях (когда отношений много) он предупредит об этом:

Appmulti1-10-1-confirm.gif

Добавив тег на отношение, логично убрать его с линий. Теперь у нас абсолютно корректный мультиполигон:

Appmulti1-11-notags.gif

С ним можно делать что угодно: например, просто так, разобьём одну линию напополам ещё раз:

Appmulti1-12-three.gif


Внутренний контур

Главное назначение мультиполигонов, и именно то, зачем мапперы вообще обращаются к этому страшному типу, — дырки в областях. Их нельзя (без извращений) сделать обычными средствами. Давайте, что ли, и мы сделаем в нашем озере остров.

Appmulti1-13-triangle.gif

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

Appmulti1-14-editrel.gif

Поскольку отношение одно, найти его в списке несложно. Тем более, что мы проставили ему тег воды, поэтому он подписан.

Appmulti1-15-addtorel.gif

Как водится, добавляем его в отношение, и проставляем роль:

Appmulti1-16-inner.gif

Ну если вы до сих пор не осчастливили статью про мультиполигоны вниманием, я даже не знаю. Роль inner, как лентяи могут догадаться, а любопытные уже знают, присваивается линиям внутреннего контура. На самом деле, все эти роли в мультиполигоне не обязательны — программы умеют сами определять вложенность — но их желательно ставить, чтобы другие мапперы не чесали репу при взгляде на ваше отношение мультиполигона.

Дырка, таким образом, готова:

Appmulti1-17-hole.gif

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

Appmulti1-18-complex.gif

В начале урока я упирал на полную передачу тегов с линии на отношение. А вот к чему приводит игнорирование этого правила: допустим, какой-то горе-маппер нашёл две линии из внешних контуров мультиполигона и неразумно превратил их в лес. Но что это?

Appmulti1-19-wrong.gif

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

Appmulti1-19-1-wall.gif

Применение такой возможности на практике мы рассмотрим в следующих уроках.


Инструмент

Знаете, всё это на практике куда проще. Достаточно обрисовать все контуры, как внешние, так и внутренние, и найти в меню «Инструменты» волшебную опцию:

Appmulti1-20-tool.gif

Всё, отношение готово. Линиям присвоены правильные роли, вам остаётся только творческая работа: добавить смысловые теги:

Appmulti1-21-addwater.gif

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

Приделаем к мультиполигонам другие мультиполигоны »