OsmAnd: Ежедневное конвертирование и автоматическое обновление карт

Перепробовал все версии осмосиса толку нет.
Но есть общее (SEVERE: Execution aborted.):

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

Из описания плагина mapsforge:

Под версией 0.35 он работать и не должен.
В версии 0.41 менялся интерфейс плагинов osmosis, изменения в коде плагина сделали, но новую сборку не выкладывали.
Под версиями 0.43.1 и выше он сходу не заработает ещё и потому что там поломали механизм проверки версий: https://trac.openstreetmap.org/ticket/5013

Итого:

  1. Можно поставить новую версию osmosis (0.42), но под неё нужно будет самостоятельно собрать плагин mapsforge из исходников. Для 0.43.1 и выше придётся ещё дополнительно подправить файл описания плагина.

  2. Можно использовать старую версию (0.36-0.40), но для них нужно добавить плагин tagtransform. Для этого можно вот этот файл положить в подкаталог lib/default в osmosis

  3. Можно поставить два экземпляра osmisis-а, один старый, для mapsforge, другой новый, со встроенным tagtransform. Ну и делать конвертацию в два этапа, с промежуточной записью результата в файл.

Выбирайте. :slight_smile:

может. запросто.

последнее время всё чаще замечаю, что османд как-то неэфективно показывает названия. любые. их слишком мало на единицу площади.

Ни в одной не работает, я их все перепробовал, и файл лежит + скачал его файлы которые он закачивает, он только сказал что файл уже существует и опять “SEVERE: Execution aborted”.

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

Кстати, если вы не знали - mapsforge можно конфигурировать. Секция “Defining a Custom Tag Mapping via XML” в описании.
Берёте умолчательный файл, правите его как нужно и затем подключаете через ключик tag-conf-file. Для building там уже есть набор значений, всего-то надо добавить пару строк про те, которых там нет.
И tagtransform в данном случае можно не использовать, он может понадобиться, если возможностей штатного конфигурирования не хватит.

Молодец! Замечал такое, но не знал почему.

К сожалению, это не так просто. В моём скрипте предварительной обработки не предусматривалось, тем более выборочной (только для карт Эстонии).

Может подумаем, можно ли что-то сделать с самой картой, чтобы place=suburb работали правильно? Возможно, их надо откорректировать? Иначе я не понимаю, если у нас Таллин покрыт place=suburb, то откуда берётся вторая(первая) улица без скобок?

Насколько понимаю, влияет расстояние куска дороги до нода с place=suburb. Так или иначе, это ровным счетом ничего не даст. Ибо в любом случае будут длинные и разбытые на куски улицы с кусками в разных районах.


Как видно, улиц без указания района нет.

ИМХО, действовать нужно иначе, в следующем порядке (при условии корректности данный в базе, по текущему вопросу имеем вполне корректные данные):

  1. При наличии возможности конфигурирования процесса конвертирования, воспользоваться им
  2. При отсутсвии оного - внедрять. Соответсвенно, связываться с автором конвертера и просить/умолять.
  3. Изменять данные, подающиеся на вход конвертеру:
    3.1 Изменения в самой базе не ломая текущие схемы (возможно ли это?)
    3.2 Локальные изменения дампа.

Как видно, при не выполеннии пункта 1 сразу предложил исправить ситуацию своими силами с наименьшими затратами, т.е. пункт 3.2

Это же замечательно. Не, замечательно не то, что “это не так просто”, а то, что речь о скрипте, а значит он легко поддается изменениям. Всего-то надо:
• Добавить проверку “а дамп Эстонии ли?”
• Если да, то скармливаем “вырезалке”, результат пускаем в конвертер. Если нет, то сразу в конвертер.

С чем имеем дело? GZip OSM XML? С вырезом из OSM XML по предложенному алгоритму, возможно, sed справится (затрудняюсь ответить, не писал я под него “условных условий”), если задачу свести к полному вырезу place=suburb, то и grep справится. На питоне вырезалка бы строк 5 занимала, но само собой, бинарные решения предпочтительнее.

Итого, расспаковываем gzip и скармливаем выходящий поток данных вырезалке, результирующий поток данных обратно гзипим, или же, тут же скармливаем его конвертеру (если он потдерживает подобные магии, хотя и магий особых и нет, вполне стандартные действия). Одна консольная команда. Почему именно так, а не расспаковать на диск и обработать? Да потому, что разархивирование/архивирование будет идти в памяти и работа с диском ограничится чтением / записью ~70Mb, что значительно быстрее, чем запись расспакованного >1Gb и последующее чтение этих данных.

Буду рад услышать и иные решения/предожения…

В карте Питера тоже попадаются улицы разбитые по “раЁнам”. Так что вопрос глобальный.

Cd_spb, а на адреску районы у вас влияют? Не может ли быть в разных районах одинаковых улиц со своей нумерацией? У нас-то нет такого, посему, деление на ройоны для нас - зло.

Теоретически, у нас есть улицы с одинаковым названием в разных районах… А вот на практике - не могу сказать. Уточню в теме Питера.

А что если бы OsmAnd делал бы приписку районов не к улицам, а к номерам домов? Минимум действий со стороны пользователей и информация о районах сохраняется. Возможно, разве что, для пользователей карт с адреской по райнам данный подход буден не очень логичным. Наверняка, они привыкли к поиску от большего к меньшему, город->район+улица->дом. Получится, же, город->улица->дом + район. Тем не менее, подход с моей колокольни должен удовлетворить потребности и тех и других.

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

Проблема адресации решается добавлением на линии улиц и на дома, адресующиеся по ним, тега addr:suburb в тех случаях, когда это необходимо, то есть тогда, когда к названию улицы принято добавлять какое-то уточнение, чтобы её можно было отличить от одноимённой улицы, расположенной в том же населённом пункте.
Например, в Санкт-Петербурге есть “Казанская улица” и есть “Казанская улица (Малая Охта)”. Соответственно, для одной у нас name=Казанская улица на линии улицы и addr:street=Казанская улица на домах, для другой - name=Казанская улица + addr:suburb=Малая Охта на линии улицы и addr:street=Казанская улица + addr:suburb=Малая Охта на домах.

А где расположен этот “Чкаловский проспект (Петроградская сторона)”? По нему адресуются какие-нибудь дома?

В OsmAnd`e сейчас так:
В поиске улицы “Казанская” два результата, одна просто “Казанская”, а вторая “Казанская(Апраксин двор)”. Выбираем улица “Казанская”, и видим две записи с номером “4”. Одна запись вёдет в центр города, а вторая рядом с Шаумяна. :frowning:

Вот этот квартал http://openstreetmap.ru/#mmap=17/59.96228/30.2966&map=17/59.96228/30.2966
“Чкаловский проспект (Петроградская сторона)” - несколько домов “15” и один 25. В других местах нет домов…
“Чкаловский проспект” - дома 15 и остальные. Плюс в других местах.

Я правильно понимаю, что OsmAnd при построении адресного поиска обрабатывает точечные и/или полигональные place=suburb? Не нужно этого делать;)

Бинарный формат (pbf). Это всё усложняет, да. Нужен спецсофт.

Насколько я понял - именно так. Тчательно перерыл окрестности разделенных улиц в Таллине, кроме нодов с place=suburb искомых наименований районов больше нигде не нашел, и ноды эти лежат сами по себе не связанные никакими отношениями.

Мдя, обидно, но и не безвыходно, просто потребуется значительно больше усилий для реализации желаемого, формат открытый. Может на просторах тырнета имеется конвертер .bz2->.pbf, реализация не красивая, но значительно сокращает время разработки.

Ага, Osmconvert и поток стандартного вывода может перенаправить, и поток стандартного ввода кушает, т.е. можно налету pbf->osm->filter->osm->pbf…

freeExec опередил :slight_smile:

./osmconvert europe.pbf |gzip >europe.osm.gz bzcat europe.osm.bz2 |./osmconvert --out-pbf >europe.pbf

Что только люди не придумают лишь бы не пользоваться osmosis-ом. :slight_smile:
Там это делается через параметры командной строки без всяких промежуточных файлов.
Не хотите osmosis - можно через osmfilter.

Нет информации. Делаю все методом тыка. Скачал и не знаю что куда ложить. Продублировал по всем папкам и по очереди запускаю скрипты. Пытаюсь понять что изменилось. Потом всё тоже самое проделываю с другим осмосисом.

Скачал и tagtransform.jar и всю его папку на которую была ссылка:

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

Даже проверять не буду, какая у этого будет производительность… :slight_smile: