вторник, 24 мая 2011 г.

Документация по Potlatch


Решил написать краткую документацию к программе  Potlatch, которые является как Вы вероятно знаете, если читаете эту страницу, инструментом по создание карт в проекте OSM
Я не хотел заменять довольно хорошее описание в WIKI проекта, а лишь дополнил описание некоторыми деталями, которые в документации недостаточно разжеваны или описаны неявно без акцента на некоторые важные детали.


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

Заметка первая или соединяйте линии!


Чтобы в карте работала авто прокладка маршрута линии надо соединять.  Да не кабы как, а чтобы они имели общею точку.   Как соединять линии достаточно хорошо описано в документации.  Главное обратите внимание: точка которая является общей для линий если она обведена квадратом! Если точка не обведена квадратом, это не общая точка для 2 или больше линий.
Вот как это показана на рисунке:



Заметка вторая: отношение это не так сложно как кажется!


Отношение это как понятно из название, это как один объект соотносится с другим.  На практике это нужно  если бы Вы например разместили один полигон внутри другова и захотели их логически объединить.  Или же Вам нужно сделать запрет поворота на дороге.  В данном случаи Вы должны определить с какой дороги надо поворачивать и куда.
Для начала начнем с полигонов.  Ничего не нашел лучшего как просто скопировать официальную документацию с Wiki:

...Рассмотрим на примере озера с островами. Хотя это могут быть и другие объекты, например, дома...

Вообще то я понимаю это так: иногда возникает необходимость разместить к примеру дома в садовом обществе которые относятся к этого садовому обществу. Внешний периметр имеет тег name=* и определяет название садового общества.  Дома внутри мультиполигона садового общества также состоят из мультиполигонов, но они не имеют тега name=* Им присваиваться тег внешнего мульполигона name то есть все дома имеют отношение к конкретному садовому обществу..  Прошу обратить внимание: это моя точка зрения.  Некоторые авторитетные товарищи просто относятся к внутренним полигона как дыркам "внешнего". Как Вам проще к этому относится, решайте сами.  Вторая причина, по которым отношения нужны, это то, что файл карты OSM обрабатываем машина,  Машина имеем дело с файлом XML и чтобы ей понять отношение объектов в карте,ей надо прочитать особое условие.     C  точки зрения человеческой  логики отношения вообще не нужны. Человек и так  увидит, что один полигон находится внутри другова.   Машине же нужны особые "подсказки".  Продолжим...

    Нарисуйте замкнутый контур озера (желательно по часовой стрелке, но не обязательно). Присвойте соответствующие теги natural=water, name=*.
    Отметьте линию, нарисованную на предыдущем шаге и нажмите кнопку "Добавить отношение" в правом нижнем углу, она выглядит как звенья цепи.
    В открывшемся окне выберите пункт "Создать новое отношение" и нажмите "OK". В следующем окне появится список с единственным тегом с ключом "type". Добавьте к этому ключу значение "multipolygon" в поле справа и нажмите "OK".
    Опять выберите линию. Теперь у линии перед списком тегов появится отдельное поле особого вида. Слева будет написано "multipolygon", а справа поле для ввода значения роли этой линии в отношении "multipolygon". Впишите туда слово "outer".
    Теперь нарисуйте контур одного из островов и при необходимости присвойте ему теги, описывающие то, что находится внутри этого контура, например, если там кусты, то присвойте тег natural=scrub. Тег name=* внутренним линиям присваивать не надо!
    Отметьте линию острова и опять нажмите кнопку "Добавить отношение". На этот раз выберите пункт "Добавить в существующее отношение". В выпадающем списке выберите отношение, ориентируясь на его тип (multipolygon) и номер. Скорее всего это будет номер "-1", если вы не выполняли сохранение.
    Теперь в списке тегов в особом теге отношения введите слово "inner", обозначающее роль внутреннего полигона в этом отношении.
    Повторите шаги с 5-го по 7-й для каждого острова. Вместо ввода каждого тега в пунктах 6 и 7 можно использовать кнопку "Повторить теги с предыдущей выбранной линии", которая находится над кнопкой "Добавить отношение", или просто нажать клавишу "R". Копирование тегов также скопирует и членство в отношении, и роль в этом отношении. 
Тут все достаточно просто и не требует иллюстрации.  Попробуйте сами и убедитесь.  При этом попробовать надо обязательно, так как Вам в этом случаи будет проще понять как делать запрет поворота на карте.

Заметка третья или таинство поворотов.

Как то сделав отношение полигонов я довольно быстро сделал и отношение двух улиц, но не как не мог понять, где можно указать to from и via  То есть не мог понять: где писать откуда и куда делать поворот.  В самом редакторе это в сущности просто, но как то неявно.
 Итак, выделяем мышкой улицу с которой надо сделать поворот.   Прошу обратить внимание, если улица слишком длинная, последний кусок надо отрезать и соединить вновь в общей точкой с основной линией.  Это достаточно просто и хорошо описано.
Тут правда нас ждет ловушка обусловленная главным образом несовершенством редактора Potlacch, поэтому если Вы решили заняться картостроительством серьезно следует перейти на редактор Josm.  Дело в том, что когда Вы режите линии в Potlache c целью добавить свое отношение,  в ваше отношение попадают автоматически отношения которые были тут ранее. Получается ошибка! Внимательно все просмотрите после создание вашего отношения и удалите все лишние.
Продолжим...
В выделенной линии надо создать отношение, как мы делали это ранее. То есть чаше всего создать новое отношение. Опять выделяем линию и тут важный момент! кликнем мышкой по слову restriction Получаем следующею картинку:


В табличке надо заполнить несколько полей.  И только потом нажать кнопку ОК!  В данном случаи это:  type=restriction, restriction=no_left_turn.  type=restriction должно быть всегда, а вот следующий тег может быть другим, в зависимости какой запрет поворота вы делаете. Подробнее описано вот здесь:
После нажатия ОК в этом шаге остается самое "тонкое": видите пустое поле после rectriction? (на выделенной линии) Вот туда и надо вписать From.!(откуда поворот)  Теперь выделяем линии с которой делаем отношение. Жмем создать отношение, добавить в вновь созданное отношение (обычно он имеет код id -1) далее в окошко restriction пишем To (куда поворот)   Теперь выделяем точку соединения обеих линий и делаем все аналогично только в restriction добавляем via.
После создания отношения полезно не кликать по слову restriction, а просто подвести к нему курсор мыши.  На карте линии участвующие в отношении выделятся.  Довольно удобно.
Cуществует видео всего описанного выше (а именно создания запрета поворота) можно посмотреть вот тут. 


Комментариев нет: