You are not logged in.
- Topics: Active | Unanswered
Announcement
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-овской - тяжело, это, по сути, придумать новый язык и сделать его интерпретатор. так почему бы не воспользоваться уже имеющимся языком? ![]()
как всё это конкретно будет выглядеть, пока обдумываю.
скорее всего, конфиг - это будет функция, которая будет запускаться для каждого объекта.
ей будут передаваться координаты и набор тегов, а из неё самой можно будет вызвать другие функции скрипта, что-то типа 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
скриптом, потому что теперешний "плоский" конфиг себя уже исчерпал. расширять его уже не получается.
делать систему стилей по типу mkgmap-овской - тяжело, это, по сути, придумать новый язык и сделать его интерпретатор. так почему бы не воспользоваться уже имеющимся языком?как всё это конкретно будет выглядеть, пока обдумываю.
скорее всего, конфиг - это будет функция, которая будет запускаться для каждого объекта.
ей будут передаваться координаты и набор тегов, а из неё самой можно будет вызвать другие функции скрипта, что-то типа 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 запутанный, потому что изначально ему такой функционал не планировался ![]()
У mkgmap тогда были несколько проблем - с кодировками, полигоны не всегда правильно резались, линии иногда уплывали на другой конец карты, и сам img очень неоптимально собирался. Поэтому, когда аффтара пинать надоело, захотелось провести карту через cgpsmapper, у которого таких проблем нет. А роутинг со всеми проверками и всё остальное было навешено уже потом.
Что касается конфига на перле, лично я с этим никаких проблем не вижу.
Имхо, вариант гораздо удачнее и по возможностям и по гибкости, чем придумывать новый язык.
Или у еого-то уже есть идеи такого языка? ![]()
Offline
#580 2009-07-09 17:02:46
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Или у еого-то уже есть идеи такого языка?
Честно говоря я не очень долго разбирался с кодом, но мне кажется работу конфига можно формализовать как совокупность проходов, тестов/условий, операций, и политики маршрутизации.
Часть тестов могут быть выполнены на любом проходе (например проверка значения тегов, координаты точек), часть только на/после определенных (например, полигон внутри некой области). Такая же ситуация с действиями.
Так можно дифференцировать выгрузку в городе/за городом. На первом проходе создаются области городов, например по 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
Главное - предусмотреть грамотную структуру, а то так можно конфиг довести до состояния по запутанности превосходящего сам osm2mp.
А тут особо запутывать и нечего: проверяем условия и в зависимости от них выполняем какие-то действия. Под вопросом только какие условия (кроме тегов) надо проверять, и необходимый список действий.
Offline
#582 2009-07-09 19:13:05
- Zkir
- Member

- From: Хрустальная Москва
- Registered: 2009-02-21
- Posts: 6,110
Re: Конвертер OSM -> MP
По уму, надо бы, в зависимости от класса дороги, делать разные рамочки ~[0x04], ~[0x05], и т.д.,
Да, надо бы разные. В Гис Руссе они всё равно одинаковые, но это уже ее проблемы
Хотя еще не факт, что тип дороги надо определять по значению тега highway. К. Галичский например рекомендует (http://www.geopainting.com/ru/maprules.html#6) следущее:
~[0x04] - федеральные трассы, обозначаемые буквой "М"
(а также европейские "E")
~[0x05] - шоссе, обозначаемые буквой "А"
~[0x06] - местные дороги типа "Р"т.е в зависимости от буквы дороги, а не от ее фактического состояния.
а встраивать это в код, при наличии конфига, - не очень красивое решение.
А что предлагается вместо этого, перенести часть кода в отдельный файл?
Что касается конфига на перле, лично я с этим никаких проблем не вижу.
Что не удивительно - для человека написавшего osm2mp на перле. ![]()
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
Имхо, вариант гораздо удачнее и по возможностям и по гибкости, чем придумывать новый язык.
Полностью поддерживаю такой подход. Если конфигурирующие функции не будут "монструозными", просто идеальный вариант.
Offline
#584 2009-07-09 19:26:16
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
ну вот не надо перла-то бояться ![]()
язык как язык, всё как у всех.
поэтому и не понимаю, зачем придумывать новый язык, когда один уже есть
Offline
#585 2009-07-09 19:27:28
- Ivan Komarov
- Member

- Registered: 2008-10-02
- Posts: 1,050
Re: Конвертер OSM -> MP
ну вот не надо перла-то бояться
язык как язык, всё как у всех.
поэтому и не понимаю, зачем придумывать новый язык, когда один уже есть
Угу. Если не перл - так придется язык конфигуратора сначала заимплементить, а потом - всех научить ![]()
Offline
#586 2009-07-09 20:15:39
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
ну вот не надо перла-то бояться
язык как язык, всё как у всех.
Я не боюсь его (хотя охотно понимаю тех кто его боится), но для написания _понятного кода_, который легко поддерживать - перл один из самых сложных языков.
В любом случае, я понимаю, что на данный момент вы настаиваете на конфигах в виде скриптов. Конструктивного диалога пока не получается (
Прошу озвучить лицензию по которой распространяется скрипт. На 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
Угу. Если не перл - так придется язык конфигуратора сначала заимплементить, а потом - всех научить
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
я не настаиваю, я просто не вижу другой альтернативы. если кто-то видит, просьба описать конкретную схему ![]()
к языку уже есть требования как минимум:
* реагировать на произвольные комбинации тегов
* по разному действовать в зависимости от нахождения объекте в городе (в том числе в _определённом_ городе) или за городом
* возможность формировать несколько 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
вопросами лицензии я особо не интересовался. пусть будет 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
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
Постойте, давайте определимся, что же такое для нас "новые конфиги".
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
Если на скорую руку, то вот примеры.
выбираем класс и тип в зависимости от тега 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>меняем тип (но не класс!) и ставим односторонность если 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>прописываем правила доступа в зависимости от access-тегов,
<routing_policy>
<if>....</if>
</routing_policy>правим среднюю скорость если есть 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
то есть как и предполагалось: придумываем новый КС-язык ![]()
тогда вопрос: чем он лучше уже имеющегося?
Offline
#595 2009-07-10 07:21:22
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
то есть как и предполагалось: придумываем новый КС-язык
тогда вопрос: чем он лучше уже имеющегося?
Предлагаю взять и сравнить два самых простых варианта, один:
<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
Так, ветвление уже в язык добавили. Остались циклы и вызов подпрограмм ![]()
Offline
#598 2009-07-10 07:52:22
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
ну, допустим
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
Так, ветвление уже в язык добавили. Остались циклы и вызов подпрограмм
Это лишнее. Сделаем гоу-ту. ![]()
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#600 2009-07-10 07:56:38
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
а как значения переменной $type вернется из конфига? через глобальную переменную?
как вариант, через запуск API-функции AddRoad
т.е. подразумевается что пользователь конфига уже освоился с отличиями операторов 'eq' и '=='?
<if test="[junction]=roundabout" > тоже пользователю во сне не явится ![]()
посмотрит пример и сделает так же.
ЗЫ: а это такая модераторская фишка убирать из сообщений метку "Last edited by ..."? просто интересуюсь.
ага ![]()
Offline