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

Vitalts, посмотрите xml, который генерируется для osmdownloader.

ну да, кое-что есть, но нет основного, ради чего затеваю, информации о том, кто генерирует.

Решил для себя переписать скрипты от AHTOH. Имеющиеся не устраивают структурой, по скрпту на карту, хочется управления с командной строки. Поскольку нужна кроссплатформенность (на Windows тестирую, на Linux будет крутится), а в последнее время полюбился Python, то на него и пал выбор. В итоге, вырос монстрик, которым и делюсь.

Возможные параметры запуска:


-i переинициализация batch.xml, если вдруг решите изменить дефолтные папки для PBF/OBF (input/temp), достаточно сменить их в <cfg/config.py> и запустить скрипт с этим параметром. При этом скрипт продолжит выполнять задачи по конвертированию
-o только переинициализация batch.xml, на этом скрипт заканчивает свою деятельность

-c скачивает и распаковывает конвертер, по умолчанию берет стабильную версию, однако, практика показала, что имеющаяся на сайте стабильная не работает. Но выпиливать не стал
-n вместо стабильной скачивать ночной билд конвертера, использовать вместе с предыдущим параметром -с

-u не обновлять файл стилей для UniRS, по умолчанию обновляется при каждом запуске

-m обработать только указанный в значении параметра список карт. В отсутствии параметра будут обработаны все карты из <cfg/maps.cfg>. Карты перечисляются через запятую. Пример: -m BY,LV,RU-AD. Указываемые карты должны быть описаны в <cfg/maps.cfg>.

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

-f только заливка по FTP, конвертации не происходит. Полезно в случае сбоев при аплоаде для перезаливки с указанием конкретного списка карт в параметре -m

-s отправка отчета критических ошибок генерации на e-mail. В случае отсутствия ошибок письмо не отправляется.

Как видно, значения принимает только один параметр, -m, остальные лишь управляют булевыми значениями с подбором дефолтных значений так, что бы для настроенной ежедневной конвертации было достаточно запустить python process_maps.py, или python process_maps.py -s для уведомлений на почту.

• Все переменные описаны в файле <cfg/config.py>.
• Файл с параметрами ftp не трогал, остается как есть и используется <cfg/ftp.cfg>.
• Файл с картами видоизменился и переименовался <cfg/maps.cfg>. В нем указываются все карты, которые собираетесь конвертировать построчно в следующем формате: ссылканазвание на выходе без расширенияназвание папки, в которую попадет файл на FTP. Тут есть один момент, подразумевается, что названия pbf также совпадают с этим значением. Т.е для AZ pbf файл имеет название AZ.osm.pbf. Надеюсь это справедливо для всех карт :slight_smile:
• Для почтовых уведомлений появился файл <cfg/mail.cfg> с информацией о подключении, получателях и т.д.
• Текст ошибок вынесен в файл <cfg/error_text.cfg>. Именно эти строки попадут в имейл, или в поток стандартного вывода при отсутсвии ключа -s.
• Для проверки работоспособности отправки и-мейл после настройки можно запусть скрипт <send_test.py>. Опять один скользкий момент. Отправку писем с местных (это я про Эстонию) мыло-хостеров можно осуществлять только через SMTP провайдера. У меня аутентификация отключена и проверить корректность работы отправки с аутентификацией пока не на чем.

PS: Еще по поводу обновления конвертера. Как уже упоминал, стабильная версия ничерта не работает, ночную как-то ссыкотно, в следствии чего рекомендую оставить ту версию, что была в скриптах AHTOH (я брал у SviMik), посему, о параметре -c можно пока забыть. Отдельно тот самый OsmAndMapCreator положил сюда

Отлично! Вставил в шапку темы.

Как быть, ежели я хочу взять на конвертацию регион, отсутствующий на гитхабе? Ведь и у SviMik в описателях карт, насколько я понимаю, его тоже не будет? Как бы этот процесс упростить…

Не совсем верно. Если под описателем имеется ввиду maplist.xml, то для него почти вся информация уже содержится в названии папки (она будет кодом) и имени файла (он будет названием).
Для русского названия следует добавить запись в name_ru.csv (правится любым текстовым редактором).
Пример:
UA-RU;Украина (рус)
(на гитхабе этого кстати нет)

Инструкция:

  1. Создайте новую папку
  2. Добавьте запись в name_ru.csv
  3. Можно заливать свою карту

Известные ограничения:

  • в btsync оно само не появится, нужно будет спросить меня
  • в случае чего, я не смогу взять конвертацию на себя

У SviMik сабдомен с картами лег?

Похоже лежит

я давал ссыль на 4пда, прикрывая ресурс османда свимиковским сервером… мож приток скачивальщиков? и всё легло?
((

Поубавьте оптимизм, качают там полтора человека, из гигабитного канала средняя нагрузка 2мбит (0.2%) :slight_smile:

И да, не так уж и просто положить Core i7-3770 @ 3.40GHz с 16гб оперативки и nginx в качестве веб-сервера.

Причина падения скорее что-то внутреннее.

Что-то не выходит у меня наладить конвертацию выбранных регионов. Тестовые конвертации на небольших объемах проходят на ура, а как дело доходит до обработки >~150Mb на PBF, так креш. Упомянутая версия конвертера из архива со скриптами валится с

A fatal error has been detected by the Java Runtime Environment:

 SIGSEGV (0xb) at pc=0x00007f5ce2fc3f41, pid=4914, tid=140036921820928

JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode linux-amd64 compressed oops)
Problematic frame:
C  [sqlite-3.7.6.3-libsqlitejdbc.so+0x12f41]  sqlite3_backup_pagecount+0x241

Судя по Османд гугло круппе бага была исправлена еще в январе 13-го. Что же, нужно, думаю, попробовать ночнушку. Ночной билд данной ошибки не вываливает, но конверитить все карты все равно не собирается, похоже, валится с аут оф мемори.

/var/osmandmc/./temp/Finland-latest_2.obf.rtree0
java.io.IOException: Stream Closed
     at java.io.RandomAccessFile.seek(Native Method)
     at rtree.FileHdr.writeFileHeader(FileHdr.java:243)
     at rtree.FileHdr.flush(FileHdr.java:333)
     at rtree.FileHdr.finalize(FileHdr.java:318)
     at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
     at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:101)
     at java.lang.ref.Finalizer.access(Finalizer.java:32)
     at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:190)
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space
java.sql.SQLException: ResultSet closed
     at org.sqlite.RS.checkOpen(RS.java:63)
     at org.sqlite.RS.markCol(RS.java:77)
     at org.sqlite.RS.getBytes(RS.java:230)
     at net.osmand.data.preparation.OsmDbAccessor$EntityProducer.run(OsmDbAccessor.java:339)

Видно, не судьба. Пока взял на себя только Болгарию с геофабрик.

А ты ключи для java про увеличение памяти брал из батников от mapcreater?

Из батников. Но игра с параметрами выделения памяти не сильно поможет, сервачек-то бюджетненький, ОСМ хоть и притягивает сильно, но жаба тоже не спит.
Снимаю с сервака конвертацию, не потянет он ее, пусть занимается статистикой. В рамках данного топика он разве что для зеркалирования сгодится. Конвертацию запускаю на Виндовой машине. Пока беру Болгарию, Финку и Швецию с геофабрик.

Гм, что-то тут не так. PBF до 50Мб пролетают на ура, Финку же в 169Мб уже 2 часа пилит. Нагрузка на CPU незначительными всплесками

Швецию в 198Мб чувствую вооще не дождусь…

Мдя, без РАМ и на ХДД далеко не уедешь, похоже, большие файлы только SviMikу с 16Гб подвласны. Придется ограничиваться крохами.

Я с 2 гигами даже на 50 метров, со своим Р4, не зарился. 30 метров обрабатывает 12 минут.
Они же на i5 (ноутбук) с 6 гигами обрабатываются меньше минуты.

То то и оно, что Виндовая машина i7 с 8Гб. Но даже с -Xmx2048M процесс идет без видимой нагрузки на CPU и жер памяти 300-600Мб. Ладно бы нагрузил одно из ядер под завязку, отожрал кучу памяти, стал бы свопить, а тут просто непонятные простои, никакой видимой деятельности. Ладно, буду довольствоваться небольшими файлами.

Я кстати тоже нагрузку не всегда вижу на слабенькой машине. А вот на i5 в момент обработки она почему то есть.
Обе машины на линухе.

у меня тоже на и5 жрёт. то одно ядро, то все. зависит от этапа задачи. часть процесса параллеится, часть – нет.

а вот озу извините. на моих 4 гб – 50-100 меговый жатый осм-архив, не больше. мос.- и лен.-область уже наверно не провернёт. и никакие свопы не помогут.
джава своп не кушает, ей чистое озу подавай.

Сначала я было расстроился, что конвертер стал плохо работать, а оказалось - что-то сломалось на http://be.gis-lab.info/data/osm_dump/dump/latest/