You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#576 2009-07-09 14:59:50

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

скриптом, потому что теперешний "плоский" конфиг себя уже исчерпал. расширять его уже не получается.
делать систему стилей по типу mkgmap-овской - тяжело, это, по сути, придумать новый язык и сделать его интерпретатор. так почему бы не воспользоваться уже имеющимся языком? smile

как всё это конкретно будет выглядеть, пока обдумываю.
скорее всего, конфиг - это будет функция, которая будет запускаться для каждого объекта.
ей будут передаваться координаты и набор тегов, а из неё самой можно будет вызвать другие функции скрипта, что-то типа writepoi, addcoastline etc.

Offline

#577 2009-07-09 15:27:29

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

так почему бы не воспользоваться уже имеющимся языком?

Тем что в освоении этот язык не очень прост, что и скажется на развитии конфигов к этому скрипту.

скорее всего, конфиг - это будет функция, которая будет запускаться для каждого объекта.
ей будут передаваться координаты и набор тегов, а из неё самой можно будет вызвать другие функции скрипта, что-то типа writepoi, addcoastline etc.

Получается будет некий API между скриптом и конфигом, т.е. человеку который хочет написать свой конфиг, надо будет знать все аспекты вызова функций в перле. С тем что все параметры функции передаются массивом у новичков точно будут проблемы. Получится либо человек сам изучает перл, или пишем мини-howto как писать конфиги (читай плагины) для скрипта.

Если проблема в том чтобы сделать парсер конфигов аля mkgmap, то могу помочь с написанием соотв модуля, на мой взгляд задачка не очень сложная.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#578 2009-07-09 15:28:14

zgremlin
Member
Registered: 2008-07-31
Posts: 332

Re: Конвертер OSM -> MP

liosha wrote:

скриптом, потому что теперешний "плоский" конфиг себя уже исчерпал. расширять его уже не получается.
делать систему стилей по типу mkgmap-овской - тяжело, это, по сути, придумать новый язык и сделать его интерпретатор. так почему бы не воспользоваться уже имеющимся языком? smile

как всё это конкретно будет выглядеть, пока обдумываю.
скорее всего, конфиг - это будет функция, которая будет запускаться для каждого объекта.
ей будут передаваться координаты и набор тегов, а из неё самой можно будет вызвать другие функции скрипта, что-то типа writepoi, addcoastline etc.

Главное - предусмотреть грамотную структуру, а то так можно конфиг довести до состояния по запутанности превосходящего сам osm2mp.

Offline

#579 2009-07-09 16:36:22

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

osm2mp запутанный, потому что изначально ему такой функционал не планировался big_smile
У mkgmap тогда были несколько проблем - с кодировками, полигоны не всегда правильно резались, линии иногда уплывали на другой конец карты, и сам img очень неоптимально собирался. Поэтому, когда аффтара пинать надоело, захотелось провести карту через cgpsmapper, у которого таких проблем нет. А роутинг со всеми проверками и всё остальное было навешено уже потом.

Что касается конфига на перле, лично я с этим никаких проблем не вижу.
Имхо, вариант гораздо удачнее и по возможностям и по гибкости, чем придумывать новый язык.
Или у еого-то уже есть идеи такого языка?  smile

Offline

#580 2009-07-09 17:02:46

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

Или у еого-то уже есть идеи такого языка?  smile

Честно говоря я не очень долго разбирался с кодом, но мне кажется работу конфига можно формализовать как совокупность проходов, тестов/условий, операций, и политики маршрутизации.
Часть тестов могут быть выполнены на любом проходе (например проверка значения тегов, координаты точек), часть только на/после определенных (например, полигон внутри некой области). Такая же ситуация с действиями.
Так можно дифференцировать выгрузку в городе/за городом. На первом проходе создаются области городов, например по boundary. На след проходе в зависимости от попадания в разные области для дорог выставляются разные уровни видимости. Приблизительно таким же образом можно "поднимать" уровни видимости в малонаселенных городах.
И это все не отменят трансляции этого языка в функции на перле.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#581 2009-07-09 18:18:13

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

zgremlin wrote:

Главное - предусмотреть грамотную структуру, а то так можно конфиг довести до состояния по запутанности превосходящего сам osm2mp.

А тут особо запутывать и нечего: проверяем условия и в зависимости от них выполняем какие-то действия. Под вопросом только какие условия (кроме тегов) надо проверять, и необходимый список действий.

Offline

#582 2009-07-09 19:13:05

Zkir
Member
From: Хрустальная Москва
Registered: 2009-02-21
Posts: 6,110

Re: Конвертер OSM -> MP

zgremlin wrote:

По уму, надо бы, в зависимости от класса дороги, делать разные рамочки ~[0x04], ~[0x05], и т.д.,

Да, надо бы разные. В Гис Руссе они всё равно одинаковые, но это уже ее проблемы smile Хотя еще не факт, что тип дороги надо определять по значению тега highway.  К. Галичский например рекомендует (http://www.geopainting.com/ru/maprules.html#6) следущее:

~[0x04] - федеральные трассы, обозначаемые буквой "М"
 (а также европейские "E")
~[0x05] - шоссе, обозначаемые буквой "А"
~[0x06] - местные дороги типа "Р"

т.е в зависимости от буквы дороги, а не от ее фактического состояния.

а встраивать это в код, при наличии конфига, - не очень красивое решение.

А что предлагается вместо этого,  перенести часть кода в отдельный файл?

liosha wrote:

Что касается конфига на перле, лично я с этим никаких проблем не вижу.

Что не удивительно - для человека написавшего osm2mp на перле. smile

Last edited by Zkir (2009-07-09 19:48:36)


Истинные слова не не приятны, приятные слова не истинны.
True words are unpleasant; pleasant words are untrue.

Offline

#583 2009-07-09 19:25:13

Ivan Komarov
Member
Registered: 2008-10-02
Posts: 1,050

Re: Конвертер OSM -> MP

liosha wrote:

Имхо, вариант гораздо удачнее и по возможностям и по гибкости, чем придумывать новый язык.

Полностью поддерживаю такой подход. Если конфигурирующие функции не будут "монструозными", просто идеальный вариант.

Offline

#584 2009-07-09 19:26:16

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

ну вот не надо перла-то бояться big_smile
язык как язык, всё как у всех.
поэтому и не понимаю, зачем придумывать новый язык, когда один уже есть

Offline

#585 2009-07-09 19:27:28

Ivan Komarov
Member
Registered: 2008-10-02
Posts: 1,050

Re: Конвертер OSM -> MP

liosha wrote:

ну вот не надо перла-то бояться big_smile
язык как язык, всё как у всех.
поэтому и не понимаю, зачем придумывать новый язык, когда один уже есть

Угу. Если не перл - так придется язык конфигуратора сначала заимплементить, а потом - всех научить smile

Offline

#586 2009-07-09 20:15:39

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

ну вот не надо перла-то бояться big_smile
язык как язык, всё как у всех.

Я не боюсь его (хотя охотно понимаю тех кто его боится), но для написания _понятного кода_, который легко поддерживать - перл один из самых сложных языков.
В любом случае, я понимаю, что на данный момент вы настаиваете на конфигах в виде скриптов. Конструктивного диалога пока не получается (

Прошу озвучить лицензию по которой распространяется скрипт. На Google code написано GPL v2, но в шапке скрипта ее нет. Если это правда, то прошу указать лицензию в самом файле.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#587 2009-07-09 20:25:41

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

Ivan Komarov wrote:

Угу. Если не перл - так придется язык конфигуратора сначала заимплементить, а потом - всех научить smile

XML чем не устраивает? Для особо сложных случаев можно прям туда вставки на перле писать.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#588 2009-07-09 20:50:56

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

я не настаиваю, я просто не вижу другой альтернативы. если кто-то видит, просьба описать конкретную схему  smile
к языку уже есть требования как минимум:
* реагировать на произвольные комбинации тегов
* по разному действовать в зависимости от нахождения объекте в городе (в том числе в _определённом_ городе) или за городом
* возможность формировать несколько mp-объектов из одного вея
* формировать разные строки из значений тегов в зависимости от наличия этих тегов

вопросами лицензии я особо не интересовался. пусть будет gpl v2. включать её текст в скрипт не хочу

Offline

#589 2009-07-09 21:29:28

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

вопросами лицензии я особо не интересовался. пусть будет gpl v2. включать её текст в скрипт не хочу

Я просил не о включении ВСЕГО текста лицензии, а о строке типа:

# Distributed under the terms of the GNU General Public License v2

Или что-то в этом духе.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#590 2009-07-09 22:05:59

Ivan Komarov
Member
Registered: 2008-10-02
Posts: 1,050

Re: Конвертер OSM -> MP

Aleksandr Dezhin wrote:

XML чем не устраивает? Для особо сложных случаев можно прям туда вставки на перле писать.

Декларативный, а-ля wix? Имхо, получится монстр
Upd: для XML'а, как я это себе представляю, придется создавать и описывать набор правил обработки и разруливания разнообразных ситуаций, условий и особых случаев (т.е. фактически новый язык), что ничуть не лучше примитивного "plane"-конфигуратора. По мере роста запросов и усложнения обработки, сие должно выродится в совершенно неподдерживаемый конгломерат.
Насколько я себе представляю, идеализированный liosh'ин вариант будет предоставлять сервис в виде ядра, описывающего последовательность обработки OSM-файлов, тогда как конфигурационными плагинами можно будет настраивать нюансы этой обработки.

Last edited by Ivan Komarov (2009-07-09 23:12:54)

Offline

#591 2009-07-10 01:57:44

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

Постойте, давайте определимся, что же такое для нас "новые конфиги".

1. Есть простые проблемы, которые можно решить расширением конфига, грубо говоря добавлением туда конструкций вида:
railway=rail & service=siding и т.п. + не значительной модификацией скрипта.

2. Есть более глобальные проблемы, которые тяжело решить не запутанным конфигом. Например: понижение скоростных характеристик дороги, при наличии на ней более двух лежачих полицейских на 100 метров, или на низких масштабах два односторонних motorway-я объединять в один, аналогично с автобусными остановками (это всего лишь примеры, подозреваю что они сейчас решаются точность координат на разных уровнях. UPD: посмотрел - не решаются.).

Я говорю о пункте 1 - для этого будет удачным решением НЕ перловые конфиги в виде XML или еще чего-то, в принципе можно и TSV как сейчас, но просто простыня получится широкая.

Пункт номер 2 - это задача совершенно другого уровня, которую вряд-ли российское сообщество OSM сможет решить. Эта задача сопоставима (если не сложнее) с написанием mapnik-а и правил к нему. В любом случае это получится монстр, в конечном итоге, либо со своим языком, либо с набором модулей/плагинов (возможно написанных на разных языках) каждый из которых будет конфигурировться отдельно. Однако целесообразность сомнительна - это всего лишь экспорт для определенных приборов. С тем же успехом можно браться за написание своего редактора или рендерера. Однако пока у нас до этого не доходило.

Поэтому я думаю, что для нас актуален пункт 1, который позволит с небольшими усилиями решить критичные проблемы.

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

Last edited by Aleksandr Dezhin (2009-07-10 02:54:14)


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#592 2009-07-10 04:19:17

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

Aleksandr Dezhin wrote:

Постойте, давайте определимся, что же такое для нас "новые конфиги".

1. Есть простые проблемы, которые можно решить расширением конфига, грубо говоря добавлением туда конструкций вида:
railway=rail & service=siding и т.п. + не значительной модификацией скрипта.

2. Есть более глобальные проблемы, которые тяжело решить не запутанным конфигом.

Пункт 2 пока не рассматривается.
По пункту 1 - вот есть уже определившаяся логика для дорог:
выбираем класс и тип в зависимости от тега highway и попадания дороги в город,
меняем тип (но не класс!) и ставим односторонность если junction=roundabout,
прописываем правила доступа в зависимости от access-тегов,
правим среднюю скорость если есть maxspeed,
помещаем в список дорог для дальнейшей обработки,
если highway=pedestrian и area=yes формируем и выводим площадной объект.

Какие будут предложения по формату конфига для описания такой логики?

Offline

#593 2009-07-10 05:14:12

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

Если на скорую руку, то вот примеры.

liosha wrote:

выбираем класс и тип в зависимости от тега highway и попадания дороги в город,

<if> <!-- это на пероходе n-->
  <test>is_polygon() & [place] in ("city", "town", "suburb")</test>
  <then><o:add_to_mask id="cities" /></then>
</if>

<if> <!-- это на пероходе n+1 -->
  <test>[highway] & in_mask("cities")</test>
  <then>
    <switch>
       <case>
         <test>[highway] = "motorway"</test>
         <then>
           <o:set key="x-class" value="1" />
         </then>
       </case>
       <default>
         <o:set key="x-class" value="0" />
         <o:set key="x-type" value="0" />
       </default>
    </switch>
    <o:push_to_routes /> <!-- добавить в список для генерации роутингово графа -->
  </then>
</if>
liosha wrote:

меняем тип (но не класс!) и ставим односторонность если junction=roundabout, ,

<if>
  <test>[junction]="roundabout" & ![oneway] = "-1"</test>
  <then>
    <o:set key="oneway" value="yes" />
    <o:set key="x-type" value="100" />   
  </then>
</if>
liosha wrote:

прописываем правила доступа в зависимости от access-тегов,

<routing_policy>
  <if>....</if>
</routing_policy>
liosha wrote:

правим среднюю скорость если есть maxspeed,

Не понял совсем понял, что это.


Синтаксис условий можно и посахарить:

<if test="...">
  ...
<else/>
  ....
</if>

<switch>
  <case test="...">....</case>
  <case test="default">....</case>
</switch>

Это немного усложнит разбор, но написание конфигов станет веселей.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#594 2009-07-10 06:18:22

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

то есть как и предполагалось: придумываем новый КС-язык  smile
тогда вопрос: чем он лучше уже имеющегося?

Offline

#595 2009-07-10 07:21:22

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

то есть как и предполагалось: придумываем новый КС-язык  smile
тогда вопрос: чем он лучше уже имеющегося?

Предлагаю взять и сравнить два самых простых варианта, один:

<if test="[junction]=roundabout & ![oneway] = -1" >
    <o:set key="oneway" value="yes" />
    <o:set key="x-type" value="100" />   
</if>

а второй сформулировать на перле в виде функии или части функции.
А потом спросить на форуме того, кто не писал ничего на перле, с каким вариантом ему проще разобраться.

Last edited by Aleksandr Dezhin (2009-07-10 07:23:37)


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#596 2009-07-10 07:30:57

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

ну, допустим

if ( $tag{junction} eq "roundabout" ) {
    $type = "0x0C";
    $oneway = 1;
}

Offline

#597 2009-07-10 07:41:22

Ivan Komarov
Member
Registered: 2008-10-02
Posts: 1,050

Re: Конвертер OSM -> MP

Так, ветвление уже в язык добавили. Остались циклы и вызов подпрограмм smile

Offline

#598 2009-07-10 07:52:22

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

ну, допустим

if ( $tag{highway} eq "roundabout" ) {
    $type = "0x0C";
    $oneway = 1;
}

а как значения переменной $type вернется из конфига? через глобальную переменную?
т.е. подразумевается что пользователь конфига уже освоился с отличиями операторов 'eq' и '=='?

ЗЫ: а это такая модераторская фишка убирать из сообщений метку "Last edited by ..."? просто интересуюсь.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#599 2009-07-10 07:53:10

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

Ivan Komarov wrote:

Так, ветвление уже в язык добавили. Остались циклы и вызов подпрограмм smile

Это лишнее. Сделаем гоу-ту. tongue


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#600 2009-07-10 07:56:38

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

Aleksandr Dezhin wrote:

а как значения переменной $type вернется из конфига? через глобальную переменную?

как вариант, через запуск API-функции AddRoad

Aleksandr Dezhin wrote:

т.е. подразумевается что пользователь конфига уже освоился с отличиями операторов 'eq' и '=='?

<if test="[junction]=roundabout" > тоже пользователю во сне не явится  smile
посмотрит пример и сделает так же.

Aleksandr Dezhin wrote:

ЗЫ: а это такая модераторская фишка убирать из сообщений метку "Last edited by ..."? просто интересуюсь.

ага smile

Offline

Board footer

Powered by FluxBB