Створення полігону країни
Цю статтю потрібно переглянути
У цій статті описано, як створити полі(гон) для відсутньої країни на geofabrik.de та як додати цей полігон на сервер генерації мап OsmAnd
Вступ
OsmAnd постачається з великою кількістю мап для багатьох країн. Більшість мап створюються з "сир их даних" мап, завантажених з geofabrik.de. Geofabrik безкоштовно надає ці мапи з сирими даними всім бажаючим, а також надає (комерційні) послуги та продукти на основі цих мап.
Geofabrik.de має стратегію надавати мапи для країн, які запитуються великою кількістю користувачів або їхніми клієнтами. Це означає, що деякі мапи ніколи не потрапляють на geofabrik, оскільки запитів на них просто недостатньо (або їх взагалі немає), як, наприклад, деякі екзотичні країни, такі як Сейшельські острови або Бурунді тощо.
Процес на сервері
Через це стратегічне рішення geofabrik, OsmAnd має можливість генерувати мапи для цих країн, і для цього використовуються інструменти OsmAndMapCreator та osmconvert. Для OsmAndMapCreator це триетапний процес:
- OsmAndMapCreator потрібен полігон, який оточує зовнішній кордон країни.
- OsmAndMapCreator потрібна "мапа з сирим и даними" наступного вищого рівня, що включає цю країну. Для Бурунді це означає, що OsmAndMapCreator потрібна мапа Африки. Для Північного Рейну-Вестфалії це означає, що OsmAndMapCreator потрібна мапа Німеччини.
- Osmconvert створить "мапу з сирими даними" з полігону, витягуючи дані мапи з "батьківської" мапи.
- OsmAndMapCreator створить мапу OsmAnd obf на основі проміжної "мапи з сирими даними", згенерованої osmconvert.
Необхідні дії
Залежно від складності (згенерованого) полігону, цей повний ланцюжок дій може зайняти від 10 хвилин до 2 годин загалом.
1. Отримайте відношення OpenStreetMap з Nominatim
- Перейдіть на nominatim.openstreetmap.org
- Введіть назву вашої країни
- Знайшовши, натисніть на посилання "(details)"
- У розділі "Details" прокрутіть вниз до "OSM: relation " і запишіть або скопіюйте номер ID відношення.
2. Згенеруйте полігон
- Перейдіть на polygons.openstreetmap.fr
- Введіть (або вставте) номер ID "OSM: relation ", який ви отримали з Nominatim для потрібної вам країни, у поле "Id of relation".
- Це створить полігон за замовчуванням, що складається з 250 до 3500 вузлів (NPoints). Сам полігон можна знайти в стовпці "poly".
- У випадку, якщо вузлів більше 350, вам потрібно буде спростити полігон. Чим простіший полігон, тим швидше можна створити мапу країни (звичайно, залежно від вмісту)
3. Спростіть полігон
Кількість вузлових точок (NPoints) має бути якомога меншою для найшвидшого створення мапи за допомогою OsmAndMapCreator. Як згадувалося: у випад ку, якщо вузлів більше 350, спробуйте зменшити їх, спростивши полігон.
- У випадку, якщо вузлів більше 350, спробуйте зменшити їх, "граючись" зі змінною X (за моїм досвідом, інші не мають значення)
- Іноді ви отримуєте чудові результати (90 NPoints, 200 NPoints, 270 NPoints), і тоді ви закінчили цей крок. Іноді ви просто не можете отримати менше 450 NPoints або близько того. Тоді вам потрібно застосувати подальші ручні кроки.
- Збережіть свій остаточний полігон у файл. Використовуйте для нього правильну назву за замовчуванням, наприклад, france.poly. Дотримуйтесь малих літер.
4. Подальша модифікація та спрощення полігону
- Відкрийте JOSM (завантажте, якщо потрібно) та відкрийте файл полігону, який ви створили (ви зробили копію/резервну копію оригінального полігону, який ви зберегли?).
- Додайте фон з меню "Images" та виберіть фон за замовчуванням "OpenStreetMap (Mapnik)".
- Вручну видалі ть вузлові точки, де це можливо. *Примітка:* Тримайте полігон якомога ближче до кордону. Вам потрібен деякий перекриття, але намагайтеся тримати його нижче 2-5 кілометрів. Перекриття в країнах буде генеруватися двічі для кожної країни. Менше перекриття означає менше часу на рендеринг та помилок рендерингу. На узбережжях та навколо островів намагайтеся тримати більшу відстань (20 кілометрів). Це широко прийнято, і море все одно "порожнє".
- Коли ви зробили все можливе, ви можете зберегти оновлений, виправлений полігон. Як сказано: намагайтеся отримати якомога менше вузлових точок, але іноді кордон країни настільки складний, що вам просто потрібно більше вузлових точок, щоб описати його та тримати полігон якомога ближче до кордону: нехай буде так.
- Не завантажуйте полігон до OSM. JOSM попросить вас завантажити вашу роботу до OpenStreetMap. Не робіть цього для цих полігонів, якщо ви точно не знаєте, що робите. Майже кожна країна у світі вже ідеально покрита в OpenStreetMap (інакше nominatim не зміг би надати вам деталі про країну, а polygons.openstreetmap.fr не зміг би згенерувати полігон на основі id відношення OSM.)
5. Додавання полі(гону) до сервера OsmAnd
Щоб мати можливість це зробити, ви повинні зареєструватися як користувач.
Щоб зробити генерацію мапи можливою, потрібні два кроки:
- Додавання полігону до розділу даних мапи
- Додавання країни до файлу даних, який використовується для генерації мап OsmAnd obf.
Додавання полігону до розділу даних мапи
- Перейдіть за веб-адресою сервера розробки OsmAnd за адресою https://github.com/osmandapp/
- Виберіть розділ OsmAnd-misc.
- Виберіть "fork", щоб створити свій власний особистий репозиторій
- Створіть новий файл та скопіюйте дані вашого полігону всередину. Збережіть файл.
- Створіть запит на витяг (pull request).
Додайте створення мапи до списку пакетів
- Перейдіть за веб-адресою сервера розробки OsmAnd за адресою github.com/osmandapp
- Виберіть розділ OsmAnd-tools.
- Виберіть "fork", щоб створити свій власний особистий репозиторій.
- У своєму особистому репозиторії перейдіть до папки obf-generation/regions.
- Виберіть файл indexes.xml та натисніть редагувати.
- Додайте свою країну у відповідне місце та збережіть файл.
- Створіть запит на витяг (pull request).
Створення власних особистих мап з полігону
Ви можете створити, наприклад, полігони з країн, округів/провінцій/штатів, регіонів та міст.
Скажімо, ваша дочка їде до Парижа на кілька днів з подругою. Її не цікавить навігація, ходьба чи їзда на велосипеді (якщо це абсолютно необхідно), але вона хоче знати, де вона знаходиться, куди йти і де знайти цікаві місця (POI). Крім того, у неї маленький телефон (низькопродуктивний процесор, мало пам'яті) та маленька SD-карта (забита музикою). Тому мапа має бути якомога меншою: як для зберігання, так і для продуктивності. Ви, звичайно, можете завантажити мапу для france_ile-de-france.obf, що містить Париж, але ви також можете згенерувати "на замовлення" мапу Парижа.
- Нехай ваша дочка завантажить OsmAnd, або ще краще: нехай вона купить OsmAnd+
- Отримайте id відношення OSM для Парижа з Nominatim.
- Отримайте (спрощений) полігон для id Парижа з polygons.openstreetmap.fr
- завантажте або скомпілюйте osmconvert
- завантажте мапу "сирих даних" Іль-де-Франс з geofabrik.de
- створіть мапу сирих даних Парижа з мапи Іль-де-Франс та полігону Парижа, наприклад:
$ osmconvert ile-de-france.osm.pbf -B=paris.poly --out-pbf > Paris.osm.pbf
- Завантажте програму OsmAndMapCreator з download.osmand.net/latest-night-build/
- Створіть свою мапу OsmAnd obf з мапи даних Paris.osm.pbf за допомогою OsmAndMapCreator.