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

На самом деле, проблем с ресурсами особо и нет. Могу забрать ещё что-нибудь на конвертирование, если надо.
Единственное, что не смогу забрать - это Украину с её двумя языковыми версиями (это никак не вписывается в концепцию моих скриптов).

Не решаемых задач нет, речь только во времени. На украинской ветке тоже конвертацией занимаются http://forum.openstreetmap.org/viewtopic.php?id=19897&p=7 - можно найти общий язык, если захотеть.

А кто конвертирует Украину на Рамблере http://navitel.osm.rambler.ru/?country=Ukraine? И есть ли Украина в формате nm2 с украиноязычными именами? Было бы хорошо, особенно для западных областей

почитал тему, не понял, чего не так с Украиной.

http://forum.openstreetmap.org/viewtopic.php?pid=414910#p414910

Эту ссылку видел, но интересует регулярное конвертирование с украинскими именами

Предлагаю подпилить скрипты конвертации, что бы они рядом с файлами .obf генерировали текстовые файлы с технической информацией о конвертации .info


who=Vitalts
pbf_timestamp=2014-04-23T05:05:00Z
obf_started=2014-04-23T06:00:00Z
obf_finihed=2014-04-23T06:11:23Z

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

Для чего это нужно? Все просто, парсингом данных файлов можно формировать динамическую страничку с общей информацией по сгенерированным картам - кто, когда, насколько актуальна карта.

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?