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

Если хочется обработку значений типа ??:rural, то можно добавить ветку


else:
  selector: if
  condition: maxspeed = .*rural
  then:
    selector: tag
    tag: maxspeed
    'DE:rural': 50
    ...
    _default: 60

Ещё раз о проблеме определения скорости:

http://www.openstreetmap.org/way/136321999 - за пределами НП и дополнительно maxspeed=RU:rural
Но нет, получаем 60 кмч…

Добавил:


  LegalSpeed:
     selector: if
     condition: maxspeed = \d.*
     then: %maxspeed
     else:
       selector: if
       condition: highway = motorway
       then: 110
       else:
         selector: if
         condition:
           or:
             - highway = living_street
             - living_street = yes
         then: 20
         else:
           selector: if
           condition: inside_city
           then: 60
           else:
             selector: if
             condition: maxspeed = .*rural
             then:
               selector: tag
               tag: maxspeed
               'RU:rural': 90
               _default: 90
             else: 90

Всё равно 60 кмч…
Подумал может приоритет первой записи. Изменил (отсортировал, переместил) последовательность else: в LegalSpeed:
Хоть застрели - 60 кмч. Зато http://www.openstreetmap.org/way/181735226 - получила скорость в 80 кмч?!
80 кмч нигде никоим образом не упоминал. Что откуда берется, ума не приложу.

  • как обеспечить приоритет для maxspeed=RU:rural
  • как запретить ошибки ориентации дороги condition: inside_city
  • можно ли дорогу с явно установленным ограничением в 90 кмч приоритетом включить в НП и получить 60 кмч без правки OSM
    скажем для примера - http://www.openstreetmap.org/way/339934389
    Спасибо!

В примере inside_city проверяется раньше, чем maxspeed = .*rural
Надо поменять местами

Я ещё раз попробую, может пальцы дрогнули, но предыдущий такой эксперимент закончился на - 80 кмч.
Существуют ли жесткие требования (ограничения) по синтаксису:

  • отступ к else
  • отступ к then или расположение относительно else…
  • положение очередного else относительно предыдущего else или относительно предыдущего then…
    В моем примере и в исходнике - лесенка, в других примерах else строго под else. Может ли как то влиять формат записи?
    Спасибо за быстрый ответ.

Да, требования к отступам жёсткие, это же yaml.
Then и else одного условия должны быть на одном уровне

Уже получилось. Прикручиваю RU:urban - на тесте.
Спасибо!

У меня так получилось:


  LegalSpeed:
     selector: if
     condition: maxspeed = \d.*
     then: %maxspeed
     else:
       selector: if
       condition: highway = motorway
       then: 110
       else:
         selector: if
         condition:
           or:
             - highway = living_street
             - living_street = yes
         then: 20
         else:
           selector: if
           condition: maxspeed = .*motorway
           then:
             selector: tag
             tag: maxspeed
             'RU:motorway': 110
             _default: 110
           else:
             selector: if
             condition: maxspeed = .*rural
             then:
               selector: tag
               tag: maxspeed
               'RU:rural': 90
               _default: 90
             else:
               selector: if
               condition: maxspeed = .*urban
               then:
                 selector: tag
                 tag: maxspeed
                 'RU:urban': 60
                 _default: 60
               else:
                 selector: if
                 condition: inside_city
                 then: 60
                 else: 90


Или так:


  LegalSpeed:
     selector: if
     condition: maxspeed = \d.*
     then: %maxspeed
     else:
       selector: if
       condition: highway = motorway
       then: 110
       else:
         selector: if
         condition:
           or:
             - highway = living_street
             - living_street = yes
         then: 20
         else:
           selector: if
           condition: maxspeed = RU.*
           then:
             selector: tag
             tag: maxspeed
             'RU:motorway': 110
             'RU:rural': 90
             'RU:urban': 60
             _default: 90
           else:
           selector: if
           condition: inside_city
           then: 60
           else: 90

Во втором случае LegalSpeed не проставляется если maxspeed не указан.

Надо бы еще service добавить, чтоб быстро не гоняли

  • highway = living_street|service

LegalSpeed:
selector: if
condition: maxspeed = \d.*
then: %maxspeed
else:
selector: if
condition: highway = motorway
then: 110
else:
selector: if
condition: maxspeed = .*rural
then:
selector: tag
tag: maxspeed
‘RU:rural’: 90
_default: 90
else:
selector: if
condition:
or:
- highway = living_street|service
- living_street = yes
then: 20
else:
selector: if
condition: inside_city
then: 60
else:
selector: if
condition: maxspeed = .*urban
then:
selector: tag
tag: maxspeed
‘RU:urban’: 60
_default: 60
else: 90

Конвертирую Узбекистан в MP используя osm2mp 1.03
данные беру с GisLab

GPSMapEdit в MP файле (после работы постпроцессора)
22 марта - находил 242 дубликата
1-го апреля - 5962 дубликата

куда копать?
PS
нашел причину, неправильно корректировал файл настроек конвертера.

Править иcходные данные в OSM

Вот что я теперь использую для rural (и иже с ними) тэгов:


  LegalSpeed:
    selector: if
    condition: maxspeed = \d.*
    then: %maxspeed
    else:
      selector: if
      condition: maxspeed = .*motorway
      then:
        selector: tag
        tag: maxspeed
        'CZ:motorway': 130
        'IT:motorway': 130
        'RO:motorway': 130
        'GB:motorway': 110
        'DE:motorway': 110
        'RU:motorway': 110
        'UK:motorway': 110
        _default: 110
    else:
      selector: if
      condition: maxspeed = .*motorroad
      then:
        selector: tag
        tag: maxspeed
        'CZ:motorroad': 110
    else:
      selector: if
      condition: maxspeed = .*rural
      then:
        selector: tag
        tag: maxspeed
        'CZ:rural': 90
        'DE:rural': 100
        'FR:rural': 90
        'IT:rural': 90
        'NO:rural': 80
        'ON:rural': 80
        'RO:rural': 90
        'RU:rural': 90
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*express
      then:
        selector: tag
        tag: maxspeed
        'JP:express': 100
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*trunk
      then:
        selector: tag
        tag: maxspeed
        'RO:trunk': 100
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*nsl
      then:
        selector: tag
        tag: maxspeed
        'JP:nsl': 60
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*nsl_dual
      then:
        selector: tag
        tag: maxspeed
        'GB:nsl_dual': 110
        'UK:nsl_dual': 110
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*nsl_single
      then:
        selector: tag
        tag: maxspeed
        'UK:nsl_single': 90
        'GB:nsl_single': 90
        _default: 60
    else:
      selector: if
      condition: maxspeed = .*urban
      then:
        selector: tag
        tag: maxspeed
        'CZ:urban': 50
        'DE:urban': 50
        'FR:urban': 50
        'IT:urban': 50
        'NO:urban': 50
        'ON:urban': 50
        'RO:urban': 50
        'RU:urban': 60
        _default: 60
    else:
      selector: if
      condition: highway = motorway
      then: 110
    else:
        selector: if
        condition:
          or:
            - highway = living_street
            - living_street = yes
        then: 20
        else:
          selector: if
          condition: inside_city
          then: 60
          else: 90

Всем спасибо!!!

Из наблюдений: если в значениях тегов в файле OSM есть хитрые символы, вроде перевода строки, то на выходе можно получить некорректный файл MP. Вот пример такой интересной точки http://www.openstreetmap.org/node/4010158535

Поправил

Это было быстро

Спасибо

Чуть ли не c 2010 года идет спор, а разве Онежское и Ладожское озера (и им подобные) не достойны coastline?
В результате очередной борьбы за соблюдение правил озера “утонули в островах”. Нет на карте конечного продукта привычного синего поля. Есть пустота, белая безмолвная пустота. А на таких площадях это не айс.

Как в osm2mp решается вопрос сохранения полигона, в случае если по нему проходит граница региона? Может ключик --clip-areas отключить? Как влияет этот ключик на полигон? Как сохранить озеро (обеспечить конвертацию), если по его середине проходит граница региона (в качестве исходника пробовал и регион, и Россия целиком).

P.S. Сразу извиняюсь за дилетантскую постановку вопроса. Смущает ещё и тот факт, что разные исходники выдают разные результаты. С gis-lab озера не конвертируются ни при каких обстоятельствах. С geofabrik Онежское вдруг появляется, Ладожского нет.
Помогите разобраться. Спасибо.

Ну этот геморой не только у нас, вот наследие исчо одного коректора:
Remove natural=coastline tagging from Lake Michigan according OSM policies: http://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#What_about_lakes.3F
Закрыто 3 месяца назад пользователем jptolosa87

Convert Lake Superior from sea to lake tagging according to http://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#What_about_lakes.3F
Закрыто 3 месяца назад пользователем jptolosa87

Convert Lake Huron to natural=water, it is not a sea; natural=coastline for inland waters is deprecated: http://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#What_about_lakes.3F
Закрыто 3 месяца назад пользователем jptolosa87

Remove natural=coastline tagging from Lake Erie according OSM policies: http://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#What_about_lakes.3F
Закрыто 3 месяца назад пользователем jptolosa87

по уму надо бы пропозалить изменения в костлайне в область больших внутренних вожных пространств, но кто это протянет ??
живет же Каспий с костлайном и вроде бы никто его не трогает.

А что, конвертер никак не обновить, тем более с 2010 года? “Большое” - это очень размытое понятие. В данном случае оно кажется большим только потому, что соизмеримо с размерами вырезанного участка планеты (в данном случае - размерами области). А если вырезка меньше? Если хочется синие пятна по краю карты в местах воды, то мне непонятно, чем озеро, например, 10 км в диаметре менее достойно того же Ладожского, а тем более Онежского.

Трогают, но нечасто http://forum.openstreetmap.org/viewtopic.php?pid=581302#p581302

хм, а если в вики костлайна прописать список озер который имеют костлайн by default интересно ситуация изменится.
к примеру взять список крупнейших озер земли и из него вытащить 20 самых больших…

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