Створення офлайн растрових та векторних мап
OsmAndMapCreator
OsmAndMapCreator можна використовувати для самостійного створення будь-яких мап, що підтримуються OsmAnd. Ви можете завантажити останню версію з вебсайту. OsmAndMapCreator має можливості інтерфейсу користувача для створення растрових та векторних мап. Для створення векторної мапи вам знадобиться файл OSM (*.pbf, *.osm.gz, *.osm.bz2
), а для створення онлайн-файлу мапи sqlite вам знадобиться базовий URL тайлів
.
Растрові мапи (прості)
Після того, як ви вибрали тайли, з яких хочете створити мапу, в меню Джерело тайлів і вони були успішно завантажені в OsmAndMapCreator, ви можете клацнути правою кнопкою миші на області, яку хочете попередньо завантажити. Після цього ви можете створити файл .sqlitedb
в Джерело тайлів → Створити базу даних sqlite.
Для створення векторної мапи вам знадобиться файл OSM (*.pbf, *.osm.gz, *.osm.bz2), а для створення онлайн-мапи sqlite вам знадобиться URL базового тайла.


Векторні мапи (прості)
Кроки для створення векторної мапи за допомогою інтерфейсу OsmAndMapCreator:
- Файл OSM
- Завантажте його з Geofabrik або невеликий експорт з OpenStreetMap
- Конвертуйте Shapefile в OSM
- Згенеруйте OSM XML самостійно за допомогою будь-яких програмних утиліт, ви можете продовжити, конвертувавши його у Формат OBF, який OsmAnd може зрозуміти
- Виберіть прапорці, чи хочете ви створити мапи, включаючи Адресу / Маршрутизацію / Транспорт / Дані мапи
- Виберіть у Файл → Створити .obf з файлу.
- Після завершення процесу у вас буде файл
.obf
у робочому каталозі.

Більше параметр ів для генерації векторних мап можна вказати в оболонці utilities.sh
.
Векторні мапи (скрипт оболонки)
Найбільш типовий та найпотужніший спосіб створення мап, який використовують розробники, — це скрипт оболонки utilities.sh
, що входить до складу OsmAndMapCreator. Він також має багато інших утилітних методів для створення деяких користувацьких мап, таких як базова мапа або мапа з назвами та межами регіонів (regions.ocbf).
Приклад скрипта:
wget -N http://download.osmand.net/latest-night-build/OsmAndMapCreator-main.zip
wget https://creator.osmand.net/osm-extract/albania_europe/albania_europe.pbf
unzip OsmAndMapCreator-main.zip -d OsmAndMapCreator
OsmAndMapCreator/utilities.sh generate-poi albania_europe.pbf --chars-build-poi-nameindex=3
Скрипт генерації приймає лише 1 файл OSM для обробки за раз (.pbf, .osm.gz, osm.bz2, .osm) та багато необов'язкових параметрів, вказаних як --xxxxxx
.
Основна команда | Опис |
---|---|
generate-obf | Генерує повний obf з інформацією про мапу, адресу, POI, транспорт, маршрутизацію |
generate-obf-no-address | Генерує повний obf, але без інформації про адресу |
generate-address | Генерує мапу лише з інформацією про адресу |
generate-poi | Генерує мапу лише з інформацією про POI |
generate-map | Генерує мапу лише з інформацією про рендеринг мапи |
generate-roads | Генерує мапу лише з інформацією про маршрутизацію |
Усі додаткові параметри можна знайти в коді, якщо вони не задокументовані належним чином Main Utilities. Усі параметри є необов'язковими!
Параметри | Опис |
---|---|
--add-region-tags | Уповільнює процес створення мапи, додаючи до кожного шляху тег назви регіону, де він обробляється. Це потрібно лише для світової базової мапи або при обробці багатонаціональних регіонів, у всіх інших випадках легше мати правильну назву для вашого файлу, наприклад, germany_..., us_.... Якщо у вас немає цього параметра і ви не вказуєте його, ймовірно, ви побачите нелокалізовані значки доріг / маршрутів громадського транспорту в OsmAnd. |
--keep-only-sea-objects | Видаляє об'єкти, які не є частиною океану / моря, використовується для створення морської мапи |
--ram-process | Вказує, що створення буде використовувати базу даних RAM SQlite замість диска - більше інформації. |
--srtm=<FOLDER> | Вказує папку з зображеннями TIF-DEM, щоб інформація про висоту та нахил була закодована в дороги |
--rendering-types=<FILE> | Розташування rendering_types.xml з правилами та тегами OSM, які потрібно закодувати в OBF - більше інформації. |
--poi-types=<FILE> | Розташування poi_types.xml з правилами та тегами OSM, які потрібно закодувати в OBF для POI - більше інформації. |
--extra-relations=<FILE> | Файл OSM з полі гонами, такими як Зони низьких викидів, теги яких мають бути поширені на шляхи. |
Примітка: Створення мап за допомогою batch.xml застаріло, будь ласка, використовуйте методи оболонки, згадані вище, та поєднуйте їх із завантаженнями / циклами за допомогою стандартних можливостей скриптів оболонки.
RAM для обробки мап
Створення мап вимагає багато пам'яті та інтенсивного введення/виведення. Іншими словами: це займає дуже багато часу і може призвести до вичерпання пам'яті! Будь ласка, спочатку перевірте генерацію на невеликих мапах. Щоб надати більше пам'яті JVM, ви можете оголосити змінну середовища JAVA_OPTS.
export JAVA_OPTS="-Xms256M -Xmx6400M"
OsmAndMapCreator/utilities.sh generate-obf ....
Що ви можете зробити для покращення продуктивності:
- Використовуйте SSD-диски.
- Використовуйте кілька дисків.
- Використовуйте обробку "в пам'яті".
Якщо ви хочете уникнути використання дискового простору та використовувати лише RAM для прискорення процесу - вкажіть параметр
--ram-process
. Ця обробка "в пам'яті" прискорить генерацію мапи на 10-50%, але вимагає багато пам'яті. 10% до 50% залежить від розміру мапи. Менші мапи отримують меншу вигоду від обробки в пам'яті, ніж більші мапи, оскільки доступ до диска для початкового читання та остаточного запису мапи відіграє більшу роль, тоді як більші мапи вимагають більше "обчислень".
При звичайній обробці "на диску" створюється файл nodes.tmp.odb з вашого файлу .osm або .osm.pbf. Цей файл nodes.tmp.odb є файлом бази даних sqlite і приблизно в 15-25 разів більший за оригінальний файл .osm.pbf, який ви завантажили з geofabrik.de. Отже, якщо ваш оригінальний файл .osm.pbf становить 300 МБ, ваш файл nodes.tmp.odb буде 5-6 ГБ! Зауважте, що менші мапи будуть приблизно в 15 разів більші, тоді як великі мапи (>350 МБ) призведуть до збільшення простору в 20-25 разів.
При обробці "в пам'яті" цей файл nodes.tmp.odb буде створено у вашій робочій пам'яті. Вам знадобиться "розмір nodes.tmp.odb" + 20-25%. Зауважте, що вам не потрібно збільшувати параметр -Xmx
, оскільки SQLite в пам'яті не займатиме пам'ять JVM і використовуватиме лише нативну операційну пам'ять.
Приклад: для файлу .osm.pbf розміром 250 МБ буде згенеровано файл nodes.tmp.odb розміром ~4.5 ГБ.
Користувацька векторна мапа (теги)
Рендеринг та пошук POI в OsmAnd залежать від інформації, записаної в OBF. Він має іншу структуру, ніж інші формати OSM, і оптимізований для мобільного використання. Ви можете переглянути вміст за допомогою Binary Inspector. 3 найважливіші частини файлу OBF:
- Розділ мапи, що використовується для рендерингу мапи, визначений Типами рендерингу
- Розділ POI, що використовується для пошуку POI та інформації про об'єкти, визначений Типами POI
- Розділ маршрутизації, що використовується для маршрутизації, визначений Типами маршрутизації - той самий файл, що й типи рендерингу, але має власний розділ
<category name="routing"> - routing_type
.
rendering_types.xml
та poi_types.xml
можуть бути перевизначені під час процесу створення мапи в налаштуваннях інтерфейсу OsmAndMapCreator або як параметри командного рядка --rendering-types=<path>
, --poi-types==<path>
до utilities.sh generate-obf
(входить до складу OsmAndMapCreator).
- Основний тип об'єкта мапи (
<type tag="abandoned:highway" value="track" minzoom="13"/>
) реєструється для кожної сутності OSM (вузол, шлях або мультиполігон). Для однієї сутності може бути зареєстровано багато основних типів (наприклад, дорога + трамвай + маршрут автобуса), тегorder
сортуватиме типи в межах с утності. - Додатковий тип об'єкта мапи (
<type tag="service" value="driveway" minzoom="13" additional="true"/>
) є додатковою інформацією, прикріпленою до сутності OSM, тому, якщо сутність OSM не зареєстрована з основним типом, вона не буде збережена в OBF. Зазвичай він зберігає інформацію для відображення додаткових функцій, таких як колір, гладкість. - Текстовий тип об'єкта мапи (
<type tag="int_ref" additional="text" minzoom="1" order="32"/>
), зберігає текстову інформацію про об'єкт, щоб її можна було пізніше відобразити на мапі. entity_convert
представляє прості скрипти перетворення тегів (<entity_convert pattern="tag_transform" from_tag="bridge" if_tag1="highway" if_value1="proposed" routing="no"/>
). Він часто використовується для об'єднання тегів у специфічні типи, щоб їх було легше відображати за допомогою користувацького стилю рендерингу. Також він дозволяє мати регіонально специфічне перетворення тегів і дозволяє мати різне відображення функцій для кожної країни.- Поширення тегів відношень. OsmAnd не індексує об'єкти відношень (крім мультиполігонів - зберігаються як об'єкти області), але дозволяє поширювати, переносити теги з відношення на члени. Очевидно, що один член може мати кілька батьківських відношень, і можливі конфлікти тегів. OsmAnd підтримує 3 способи вирішення конфліктів:
- об'єднати всі теги як довгий рядок, розділений комами (добре для відображення назв автобусних маршрутів як довгого рядка на шляху -
nameTags
,namePrefix
). - сортувати значення та зберігати найвище значення (добре для відображення маршрутів місцевих проти міжнародних -
relationGroupSort
,additionalTags
,additionalNamePrefix
). - генерує унікальні теги для кожного відношення (наразі не використовується, але зберігає інформацію без втрат -
relationGroupNameTags
,relationGroupAdditionalTags
,relationGroupPrefix
). Більше інформації ви можете знайти в Типах рендерингу.
- об'єднати всі теги як довгий рядок, розділений комами (добре для відображення назв автобусних маршрутів як довгого рядка на шляху -
Докладніше: зазвичай користувацькі векторні мапи поєднуються з користувацьким стилем рендерингу.
Растрові мапи (розширені)
OSM — це велика база даних для мап, але вона не завжди містить потрібну інформацію (наприклад, про пустелі). Іноді потрібну інформацію можна отримати з інших джерел, таких як паперові мапи або супутникові знімки.
Існують спеціальні програми для підготовки, конвертації, калібрування будь-яких вихідних мап (мапи у форматі зображення, pdf-форматі, растрові онлайн-мапи) в онлайн-мапи OsmAnd.
Про деякі з них нижче.
MOBAC
Mobile Atlas Creator (MOBAC) — це програма з відкритим вихідним кодом (GPL) для створення офлайн-атласів. Mobile Atlas Creator може використовувати велику кількість різних онлайн-мап, таких як OpenStreetMap та інші постачальники мап, як джерело для створення офлайн-атласу.
Просто завантажте програму, потім запустіть її.
У діалоговому вікні вибору формату виберіть OsmAnd SQLite або OsmAnd tile storage. SQLite — це один файл з вибраною областю, тоді як тайли — це окремі частини мапи, зібрані на вашому пристрої. SQLite часто виявляється зручнішим, оскільки він зберігається в одному місці та займає менше місця для зберігання.
Виберіть джерело мапи, рівні масштабування та інші функції. Виберіть область, потім виберіть меню Selection -> Add selection.
Після цього ви можете створити свій файл SQLite: 'Atlas' -> 'Create Atlas'.
MAPC2MAPC
MAPC2MAPC — це програма для Windows для маніпулювання цифровими мапами та їх конвертації між різними платформами та програмним забезпеченням.
Наприклад, ви можете конвертувати та калібрувати будь-який формат зображення та pdf-мапи в онлайн-мапу OsmAnd.
Відеоурок використання програми.
SASPlanet
SASPlanet — це безкоштовне програмне забезпечення з відкритим вихідним кодом для навігації з можливістю перегляду та завантаження мап та супутникових знімків Землі з різних онла йн-сервісів в онлайн-мапу OsmAnd.
Завантажте програму, англійський посібник.
Геолокований PDF або TIFF
Як конвертувати геолоковані файли pdf/tif/tiff в OsmAnd SQLitedb у Windows. Геореференсування файлів tif/tiff та pdf можна досить просто зробити в QGIS.
- Встановіть та запустіть OSGeo4W
OSGeo4W — це бінарний дистрибутив широкого набору відкритого геопросторового програмного забезпечення для Windows. Він включає QGIS, GDAL/OGR, GRASS, а також багато інших пакетів (понад 150). Завантажте та запустіть мережевий інсталятор OSGeo4W.
Тепер, з меню "Пуск", запустіть OSGeo4W Shell. Він повинен запуститися в каталозі з а замовчуванням C:\OSGeo4W. Або перейдіть до своєї робочої папки (або ви можете просто використовувати C:\OSGeo4W для цієї мети).
- Конвертуйте tif/pdf в mbtiles
Щоб конвертувати tif/pdf в mbtiles, запустіть (замінивши імена файлів tif/pdf та mbtiles де необхідно):
gdal_translate -co "ZLEVEL=9" -of mbtiles map_1.tif map_1.mbtiles --config gdal_pdf_dpi 600
gdaladdo -r nearest map_1.mbtiles
Перша команда дозволяє GDAL визначити максимальний масштаб, який він може згенерувати на основі роздільної здатності зображення. І конвертує файл tif/pdf в mbtiles із зазначеним DPI. Не соромтеся експериментувати з цим налаштуванням, але будьте обережні, оскільки високі значення DPI зроблять процес конвертації дуже довгим, а розмір отриманого файлу дуже великим.
Друга команда дозволяє GDAL визначити та згенерувати менші рівні масштабування на основі максимального рівня масштабування, який вже існує. Нерідко ці дві команди займають деякий час для завершення.
- Встановіть Python з Microsoft Store
Мабуть, найпростіший спосіб — перейти до Microsoft Store.
Якщо під час спроби виконати скрипт Python на наступному кроці виникає така помилка:
Traceback (most recent call last):
File <console>
, line 1, in <module>
ImportError: No module named PIL
Тоді в PowerShell запустіть таку команду:
pip install Pillow
- Конвертуйте формат mbtiles в sqlitedb (підходить для OsmAnd та RMaps)
Ви знайдете скрипт Python mbtiles2osmand.py на GitHub. Завантажте його до своєї робочої папки та запустіть командний рядок або PowerShell.
Використання:
python3_ mbtiles2osmand.py [-h] [-f] [--jpg JPEG_QUALITY] input output
Позиційні аргументи:
input вхідний файл
output вихідний файл
Необов'язкові аргументи:
-h, --help показати це повідомлення довідки та вийти
-f, -force перезаписати вихідний файл, якщо він існує
--jpg JPEG_QUALITY конвертувати тайли в JPEG із зазначеною якістю
Приклади:
Простий:
python3 mbtiles2osmand.py input.mbtiles output.sqlitedb
Конвертація тайлів в jpeg зі стисненням:
python3 mbtiles2osmand.py --jpg 75 input.mbtiles output.sqlitedb
- Скопіюйте файл .sqlitedb до OsmAnd
Тепер у вас має бути готовий файл .sqlitedb у вашій робочій папці. Скопіюйте його до відповідної папки OsmAnd та використовуйте його як основний, підкладку або накладку. Докладніше див. у Посібнику користувача. Готово!
- (НЕОБОВ'ЯЗКОВО) Об'єднайте кілька файлів osmand в один файл
Якщо вам потрібно, ви можете знайти файл скрипта unite_osmand.py на GitHub. Знову ж таки - завантажте його до своєї робочої папки та запустіть командний рядок або PowerShell.
Використання:
python3 unite_osmand.py [-h] [-f] input [input ...] output
Позиційні аргументи:input вхідні файли. Якщо кілька файлів містять тайл з однаковими координатами, буде використано тайл з першого (зі списку аргументів) файлу
output вихідний файл
Необов'язкові аргументи:-h, --help показати це повідомлення довідки та вийти
-f, -force перезаписати вихідний файл, якщо він існує
- ДОДАТКОВО: Конвертуйте один GeoPDF в GeoTIFF
Якщо з будь-якої причини ви захочете конвертувати один geopdf в geotiff, використовуйте команду gdal_translate та введіть власні параметри, де позначено < >. Ви можете використовувати gdal_translate з необов'язковими параметрами або без них. Обробка може зайняти багато часу, а отриманий tiff може бути дуже великим, особливо якщо включити ортофотознімки та затінений рельєф. Тому може бути гарною ідеєю виключити деякі шари PDF (див. другий приклад).
Використання:
gdal_translate <GeoPDF filename> <Output Geotiff Filename>
-of gtiff --config
gdal_pdf_layers_off “<pdf layername 1>,<pdf layername 2>,<pdf layername 3>
” --config gdal_pdf_dpi <output dpi>
Приклади:
Конвертація pdf з усіма його шарами в geotiff за замовчуванням DPI:
gdal_translate geo_sample_map.pdf output_sample_map.tif -of gtiff
Виключення кількох шарів з конвертації за допомогою параметра gdal_pdf_layers_off, за яким слідує список назв шарів, розділених комами. Вихідний файл — це geotiff із зазначеним 600 DPI:
gdal_translate geo_sample_map.pdf output_sample_map.tif -of gtiff --config gdal_pdf_layers_off “Map_Collar, Map_Frame.Projections_and_Grids, Map_Frame.Terrain.Shaded_Relief, Images.Orthoimage” --config gdal_pdf_dpi 600
- Джерела:
- Gdal2mbtiles (лише для довідки),
- Як конвертувати geopdf в geotiff за допомогою GDAL,
- Див. також Створення накладних мап для OsmAnd на Linux.
Поширені проблеми
Проблема OutOfMemoryError
Проблема: OsmAndMapCreator завершується з повідомленням - OutOfMemoryError.
Файл, який ви намагаєтеся обробити за допомогою OsmAndMapCreator, занадто великий. Спробуйте обробити менший файл або збільште пам'ять для OsmAndMapCreator у файлі .sh або .bat. Параметр -Xmx
визначає, скільки пам'яті може споживати програма. Налаштування можуть відрізнятися для 64-розрядних (більше 1.5 ГБ) та 32-розрядних (максимум близько 1.5 ГБ) машин.
Проблема порожнього файлу
Проблема: Після конвертації .osm в .obf лише з індексом POI, .obf порожній, хоча оригінальний файл .osm містив POI.
Можливо, під час конвертації osm з іншого джерела, наприклад Garmin, був відсутній важливий тег, щоб OsmAndMapCreator розпізнав POI. Якщо точка у файлі OSM виглядає так:
<node id='-24' visible='true' lat='1.3094000' lon='103.7784000'>
<tag k='created_by' v='GPSBabel-1.4.2'/>
<tag k='name' v='Street-Soccer Court'/>
</node>
змініть її, щоб вона містила додатковий тег 'amenity', наприклад:
<node id='-24' visible='true' lat='1.3094000' lon='103.7784000'>
<tag k='created_by' v='GPSBabel-1.4.2'/>
<tag k='name' v='Street-Soccer Court'/>
<tag k='amenity' v='point' />
</node>
Потім конвертуйте файл за допомогою OsmAndMapCreator. Ви можете перевірити на сайті OSM, які теги є хорошими для використання, а також перевірити, які теги підтримуються OsmAnd.