Skip to main content

Tworzenie map rastrowych i wektorowych offline

OsmAndMapCreator

OsmAndMapCreator może być używany do samodzielnego tworzenia dowolnych map obsługiwanych przez OsmAnd. Najnowszą wersję można pobrać ze strony internetowej. OsmAndMapCreator posiada interfejs użytkownika do tworzenia map rastrowych i wektorowych. Aby utworzyć mapę wektorową, potrzebny będzie plik OSM (*.pbf, *.osm.gz, *.osm.bz2), a aby utworzyć plik mapy sqlite online, potrzebny będzie podstawowy adres URL kafelka.

Mapy rastrowe (proste)

Po wybraniu kafelków, z których chcesz utworzyć mapę w menu Źródło kafelków i pomyślnym załadowaniu ich do OsmAndMapCreator, możesz kliknąć prawym przyciskiem myszy na obszar, który chcesz wstępnie załadować. Następnie możesz utworzyć plik .sqlitedb w Źródło kafelkówUtwórz bazę danych sqlite.

Aby utworzyć mapę wektorową, potrzebny będzie plik OSM (*.pbf, *.osm.gz, *.osm.bz2), a aby utworzyć mapę sqlite online, potrzebny będzie adres URL podstawowego kafelka.

Pobierz mapy rastrowe Utwórz mapy sqlitedb

Mapy wektorowe (proste)

Kroki tworzenia mapy wektorowej za pomocą interfejsu użytkownika OsmAndMapCreator:

  1. Plik OSM
  2. Zaznacz pola wyboru, czy chcesz wygenerować mapy zawierające dane adresowe / routingowe / transportowe / mapowe
  3. Wybierz w PlikUtwórz .obf z pliku.
  4. Po zakończeniu procesu będziesz mieć plik .obf w katalogu roboczym.
Utwórz mapy wektorowe

Więcej parametrów dotyczących generowania map wektorowych można określić w powłoce utilities.sh.

Mapy wektorowe (skrypt powłoki)

Najbardziej typowym i najpotężniejszym sposobem tworzenia map używanym przez programistów jest skrypt powłoki utilities.sh spakowany w OsmAndMapCreator. Posiada on również wiele innych metod narzędziowych do tworzenia niestandardowych map, takich jak mapa bazowa lub mapa z nazwami regionów i granicami (regions.ocbf).

Przykładowy skrypt:

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

Skrypt generujący przyjmuje tylko 1 plik OSM do przetworzenia na raz (.pbf, .osm.gz, osm.bz2, .osm) i wiele opcjonalnych parametrów określonych jako --xxxxxx.

Główne polecenieOpis
generate-obfGeneruje pełny obf z mapą, adresem, POI, transportem, informacjami o routingu
generate-obf-no-addressGeneruje pełny obf, ale bez informacji adresowych
generate-addressGeneruje mapę tylko z informacjami adresowymi
generate-poiGeneruje mapę tylko z informacjami POI
generate-mapGeneruje mapę tylko z informacjami o renderowaniu mapy
generate-roadsGeneruje mapę tylko z informacjami o routingu

Wszystkie dodatkowe parametry można znaleźć w kodzie, jeśli nie są odpowiednio udokumentowane Main Utilities. Wszystkie parametry są opcjonalne!

ParametryOpis
--add-region-tagsSpowalnia proces tworzenia mapy, dodając do każdej drogi znacznik nazwy regionu, w którym została przetworzona. Jest to potrzebne tylko dla mapy bazowej świata lub podczas przetwarzania regionów wielonarodowych, we wszystkich innych przypadkach łatwiej jest mieć odpowiednią nazwę dla pliku, np. germany_... , us_.... Jeśli nie masz tego parametru i nie określisz go, prawdopodobnie zobaczysz niezlokalizowane odznaki dróg / tras transportu publicznego w OsmAnd.
--keep-only-sea-objectsUsuwa obiekty, które nie są częścią oceanu / morza, jest używany do tworzenia mapy morskiej
--ram-processOkreśla, że tworzenie będzie używać bazy danych RAM SQlite zamiast dysku - więcej informacji.
--srtm=<FOLDER>Określa folder z obrazami TIF-DEM, dzięki czemu informacje o wysokości i nachyleniu zostaną zakodowane w drogach
--rendering-types=<FILE>Lokalizacja rendering_types.xml z regułami i tagami OSM, które muszą być zakodowane w OBF - więcej informacji.
--poi-types=<FILE>Lokalizacja poi_types.xml z regułami i tagami OSM, które muszą być zakodowane w OBF dla POI - więcej informacji.
--extra-relations=<FILE>Plik OSM z poligonami, takimi jak Strefy Niskiej Emisji, których tagi powinny być propagowane do dróg.

Uwaga: Tworzenie map za pomocą batch.xml jest przestarzałe, proszę używać metod powłoki wymienionych powyżej i łączyć z pobieraniem / cyklami za pomocą standardowych możliwości skryptów powłoki.

RAM do przetwarzania map

Tworzenie map jest pamięciożerne i intensywne pod względem operacji wejścia/wyjścia. Innymi słowy: trwa bardzo długo i może zabraknąć pamięci! Proszę najpierw sprawdzić generowanie na małych mapach. Aby przydzielić więcej pamięci JVM, można zadeklarować zmienną środowiskową JAVA_OPTS.

export JAVA_OPTS="-Xms256M -Xmx6400M"
OsmAndMapCreator/utilities.sh generate-obf ....

Co można zrobić, aby poprawić wydajność:

  • Używaj dysków SSD.
  • Używaj wielu dysków.
  • Używaj przetwarzania "w pamięci". Jeśli chcesz uniknąć używania miejsca na dysku i używać tylko pamięci RAM, aby przyspieszyć proces - określ parametr --ram-process. To przetwarzanie "w pamięci" przyspieszy generowanie mapy o 10-50%, ale wymaga dużo pamięci. 10% do 50% zależy od rozmiaru mapy. Mniejsze mapy mniej korzystają z przetwarzania w pamięci niż większe mapy, ponieważ dostęp do dysku do początkowego odczytu i końcowego zapisu mapy odgrywa większą rolę, podczas gdy większe mapy wymagają więcej "obliczeń".

W normalnym przetwarzaniu "na dysku" plik nodes.tmp.odb jest tworzony z pliku .osm lub .osm.pbf. Ten plik nodes.tmp.odb jest plikiem bazy danych sqlite i jest około 15 do 25 razy większy niż oryginalny plik .osm.pbf, który pobrałeś z geofabrik.de. Tak więc, jeśli oryginalny plik .osm.pbf ma 300 MB, plik nodes.tmp.odb będzie miał od 5 GB do 6 GB! Zauważ, że mniejsze mapy będą miały współczynnik około 15x, podczas gdy duże mapy (>350 MB) będą miały wzrost przestrzeni od 20x do 25x.

Przy przetwarzaniu "w pamięci" ten plik nodes.tmp.odb zostanie utworzony w pamięci roboczej. Będziesz potrzebować "rozmiaru nodes.tmp.odb" + 20-25%. Należy pamiętać, że nie trzeba zwiększać parametru -Xmx, ponieważ SQLite w pamięci nie zajmuje pamięci JVM i używa tylko natywnej pamięci operacyjnej.

Przykład: dla pliku .osm.pbf o rozmiarze 250 MB zostanie wygenerowany plik nodes.tmp.odb o rozmiarze ~4,5 GB.

Niestandardowa mapa wektorowa (tagi)

Renderowanie i wyszukiwanie POI w OsmAnd opiera się na informacjach zapisanych w OBF. Ma on inną strukturę niż inne formaty OSM i jest zoptymalizowany pod kątem użytku mobilnego. Zawartość można sprawdzić za pomocą Inspektora binarnego. Trzy najważniejsze części pliku OBF to:

  • Sekcja mapy używana do renderowania mapy, zdefiniowana przez Typy renderowania
  • Sekcja POI używana do wyszukiwania POI i informacji o obiektach, zdefiniowana przez Typy POI
  • Sekcja routingu używana do routingu, zdefiniowana przez Typy routingu - ten sam plik co typy renderowania, ale ma własną sekcję <category name="routing"> - routing_type.

rendering_types.xml i poi_types.xml mogą być nadpisane podczas procesu tworzenia mapy w ustawieniach interfejsu użytkownika OsmAndMapCreator lub jako parametry wiersza poleceń --rendering-types=<path>, --poi-types==<path> do utilities.sh generate-obf (spakowane z OsmAndMapCreator).

  • Główny typ obiektu mapy (<type tag="abandoned:highway" value="track" minzoom="13"/>) jest rejestrowany dla każdej encji OSM (węzła, drogi lub multipoligonu). Dla jednej encji może być zarejestrowanych wiele głównych typów (np. droga + tramwaj + trasa autobusowa), tag order sortuje typy w obrębie encji.
  • Dodatkowy typ obiektu mapy (<type tag="service" value="driveway" minzoom="13" additional="true"/>) to dodatkowe informacje dołączone do encji OSM, więc jeśli encja OSM nie jest zarejestrowana z głównym typem, nie zostanie zapisana w OBF. Zazwyczaj przechowuje informacje do wyświetlania dodatkowych funkcji, takich jak kolor, gładkość.
  • Typ obiektu mapy tekstowej (<type tag="int_ref" additional="text" minzoom="1" order="32"/>), przechowuje informacje tekstowe o obiekcie, aby można je było później wyświetlić na mapie.
  • entity_convert reprezentuje proste skrypty transformacji tagów (<entity_convert pattern="tag_transform" from_tag="bridge" if_tag1="highway" if_value1="proposed" routing="no"/>). Jest często używany do łączenia tagów w określone typy, dzięki czemu łatwiej jest je wyświetlać za pomocą niestandardowego stylu renderowania. Pozwala również na transformację tagów specyficznych dla regionu i umożliwia renderowanie różnych funkcji w zależności od kraju.
  • Propagacja tagów relacji. OsmAnd nie indeksuje obiektów relacji (z wyjątkiem multipoligonów - przechowywanych jako obiekty obszarowe), ale pozwala na propagowanie, wypychanie tagów z relacji na członków. Oczywiście jeden członek może mieć wiele relacji nadrzędnych i możliwe są konflikty tagów. OsmAnd obsługuje 3 sposoby radzenia sobie z konfliktami:
    • łączy wszystkie tagi jako długi, oddzielony przecinkami ciąg (dobry do renderowania nazw tras autobusowych jako długiego ciągu na drodze - nameTags, namePrefix).
    • sortuje wartości i zachowuje najwyższą wartość (dobry do renderowania tras lokalnych vs międzynarodowych - relationGroupSort, additionalTags, additionalNamePrefix).
    • generuje unikalne tagi dla każdej relacji (nieużywane na razie, ale przechowuje informacje bez utraty - relationGroupNameTags, relationGroupAdditionalTags, relationGroupPrefix). Więcej informacji można znaleźć w Typach renderowania.

Czytaj więcej: zazwyczaj niestandardowe mapy wektorowe są łączone z niestandardowym stylem renderowania.

Mapy rastrowe (zaawansowane)

OSM to duża baza danych map, ale nie zawsze zawiera potrzebne informacje (na przykład o pustyniach). Czasami potrzebne informacje można uzyskać z innych źródeł, takich jak mapy papierowe lub zdjęcia satelitarne.

Istnieją specjalne programy do przygotowania, konwersji, kalibracji wszelkich map źródłowych (map w formacie obrazu, formacie pdf, rastrowych map online) na mapy online OsmAnd.

Poniżej o niektórych z nich.

MOBAC

Mobile Atlas Creator (MOBAC) to program open source (GPL) do tworzenia atlasów offline. Mobile Atlas Creator może wykorzystywać dużą liczbę różnych map online, takich jak OpenStreetMap i inni dostawcy map, jako źródło do tworzenia atlasu offline.

Wystarczy pobrać program, a następnie go uruchomić.

W oknie dialogowym wyboru formatu wybierz OsmAnd SQLite lub OsmAnd tile storage. SQLite to pojedynczy plik z wybranym obszarem, podczas gdy kafelki to oddzielne fragmenty mapy zebrane na Twoim urządzeniu. SQLite często okazuje się wygodniejszy, ponieważ jest przechowywany w jednym miejscu i zajmuje mniej miejsca.

Wybierz źródło mapy, poziomy powiększenia i inne funkcje. Wybierz obszar, a następnie wybierz menu Selection -> Add selection.

Następnie możesz utworzyć swój plik SQLite: 'Atlas' -> 'Create Atlas'.

MAPC2MAPC

MAPC2MAPC to program dla systemu Windows do manipulowania mapami cyfrowymi i konwertowania ich między różnymi platformami i oprogramowaniem.

Na przykład, możesz konwertować i kalibrować dowolny format obrazu i mapy PDF na mapę online OsmAnd.

Samouczek wideo dotyczący korzystania z programu.

SASPlanet

SASPlanet to darmowe, otwarte oprogramowanie nawigacyjne z możliwością przeglądania i pobierania map oraz zdjęć satelitarnych Ziemi z różnych usług online do mapy online OsmAnd.

Pobierz program, angielski przewodnik.

Geolokalizowany PDF lub TIFF

Jak przekonwertować geolokalizowane pliki pdf/tif/tiff do OsmAnd SQLitedb w systemie Windows. Georeferencjonowanie plików tif/tiff i pdf można dość prosto wykonać w QGIS.

  1. Zainstaluj i uruchom OSGeo4W

OSGeo4W to binarna dystrybucja szerokiego zestawu otwartego oprogramowania geoprzestrzennego dla systemu Windows. Obejmuje QGIS, GDAL/OGR, GRASS, a także wiele innych pakietów (ponad 150). Pobierz i uruchom OSGeo4W instalator sieciowy.

Teraz, z menu Start, uruchom OSGeo4W Shell. Powinien uruchomić się w domyślnym katalogu C:\OSGeo4W. Przejdź do folderu roboczego (lub możesz po prostu użyć C:\OSGeo4W do tego celu).

  1. Konwertuj tif/pdf na mbtiles

Aby przekonwertować tif/pdf na mbtiles uruchom (zastępując nazwy plików tif/pdf i mbtiles tam, gdzie to konieczne):

 gdal_translate -co "ZLEVEL=9" -of mbtiles map_1.tif map_1.mbtiles --config gdal_pdf_dpi 600 

 gdaladdo -r nearest map_1.mbtiles 

Pierwsze polecenie pozwala GDAL określić maksymalne powiększenie, które może wygenerować na podstawie rozdzielczości obrazu. I konwertuje plik tif/pdf na mbtiles z określoną rozdzielczością DPI. Możesz swobodnie eksperymentować z tym ustawieniem, ale bądź ostrożny, ponieważ wysokie wartości DPI sprawią, że proces konwersji będzie bardzo długi, a wynikowy rozmiar pliku bardzo duży.

Drugie polecenie pozwala GDAL określić i wygenerować mniejsze poziomy powiększenia na podstawie maksymalnego poziomu powiększenia, który już istnieje. Często zdarza się, że wykonanie tych dwóch poleceń zajmuje trochę czasu.

  1. Zainstaluj Pythona ze sklepu Microsoft Store

Prawdopodobnie najłatwiejszym sposobem jest przejście do Microsoft Store.

Jeśli podczas próby wykonania skryptu Pythona w następnym kroku wystąpi błąd:

Traceback (ostatnie wywołanie):

Plik <console>, linia 1, w <module>

ImportError: Brak modułu o nazwie PIL

Następnie w PowerShell uruchom następujące polecenie:

pip install Pillow

  1. Konwertuj format mbtiles na sqlitedb (odpowiedni dla OsmAnd i RMaps)

Skrypt Pythona mbtiles2osmand.py znajdziesz na GitHubie. Pobierz go do swojego folderu roboczego i uruchom Wiersz Poleceń lub PowerShell.

Użycie:

 python3_ mbtiles2osmand.py [-h] [-f] [--jpg JPEG_QUALITY] input output 

 Argumenty pozycyjne: 

input     plik wejściowy

output     plik wyjściowy

 Argumenty opcjonalne: 

-h, --help     pokaż tę wiadomość pomocy i zakończ

-f, -force     nadpisz plik wyjściowy, jeśli istnieje

--jpg JPEG_QUALITY     konwertuj kafelki na JPEG z określoną jakością

Przykłady:

Prosty:

 python3 mbtiles2osmand.py input.mbtiles output.sqlitedb 

Konwersja kafelków na jpeg z kompresją:

 python3 mbtiles2osmand.py --jpg 75 input.mbtiles output.sqlitedb 

  1. Skopiuj plik .sqlitedb do OsmAnd

Teraz powinieneś mieć plik .sqlitedb gotowy w swoim folderze roboczym. Skopiuj go do odpowiedniego folderu OsmAnd i użyj go jako głównej, podkładowej lub nakładkowej mapy. Więcej szczegółów znajdziesz w Przewodniku użytkownika. Gotowe!

  1. (OPCJONALNIE) Połącz wiele plików osmand w jeden plik

Jeśli potrzebujesz, możesz znaleźć plik skryptu unite_osmand.py na GitHubie. Ponownie - pobierz go do swojego folderu roboczego i uruchom Wiersz Poleceń lub PowerShell.

Użycie:

 python3 unite_osmand.py [-h] [-f] input [input ...] output 

Argumenty pozycyjne:

input      pliki wejściowe. Jeśli wiele plików zawiera kafelek o tych samych współrzędnych, użyty zostanie kafelek z pierwszego (z listy argumentów) pliku

output     plik wyjściowy

Argumenty opcjonalne:

-h, --help     pokaż tę wiadomość pomocy i zakończ

-f, -force     nadpisz plik wyjściowy, jeśli istnieje

  1. DODATKOWO: Konwertuj pojedynczy GeoPDF na GeoTIFF

Jeśli z jakiegokolwiek powodu chcesz przekonwertować pojedynczy geopdf na geotiff, użyj polecenia gdal_translate i wprowadź własne parametry tam, gdzie oznaczono < >. Możesz użyć gdal_translate z opcjonalnymi parametrami lub bez nich. Przetwarzanie może zająć dużo czasu, a wynikowy plik tiff może być naprawdę duży, zwłaszcza jeśli zawiera ortofotografię i cieniowany teren. Dlatego dobrym pomysłem może być wykluczenie niektórych warstw PDF (patrz drugi przykład).

Użycie:

 gdal_translate <nazwa pliku GeoPDF> <Nazwa pliku wyjściowego Geotiff> -of gtiff --config gdal_pdf_layers_off “<nazwa warstwy pdf 1>,<nazwa warstwy pdf 2>,<nazwa warstwy pdf 3>” --config gdal_pdf_dpi <wyjściowe dpi> 

Przykłady:

Konwersja pliku PDF ze wszystkimi jego warstwami na geotiff w domyślnej rozdzielczości DPI:

 gdal_translate geo_sample_map.pdf output_sample_map.tif -of gtiff 

Wykluczanie kilku warstw z konwersji za pomocą parametru gdal_pdf_layers_off , po którym następuje lista nazw warstw oddzielonych przecinkami. Plik wyjściowy to geotiff o określonej rozdzielczości 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 

  1. Źródła:

Typowe problemy

Problem OutOfMemoryError

Problem: OsmAndMapCreator kończy się błędem - OutOfMemoryError.

Plik, który próbujesz przetworzyć za pomocą OsmAndMapCreator, jest zbyt duży. Spróbuj przetworzyć mniejszy plik lub zwiększ pamięć dla OsmAndMapCreator w pliku .sh lub .bat. Parametr -Xmx określa, ile pamięci program może zużyć. Ustawienia mogą być różne dla maszyn 64-bitowych (więcej niż 1,5 GB) i 32-bitowych (maksymalnie około 1,5 GB).

Problem z pustym plikiem

Problem: Po konwersji pliku .osm na .obf z tylko indeksem POI, plik .obf jest pusty, chociaż oryginalny plik .osm zawierał POI.

Może to być spowodowane brakiem kluczowego tagu dla OsmAndMapCreator, aby rozpoznać POI, gdy konwertowałeś osm z innego źródła, takiego jak Garmin. Jeśli punkt w pliku OSM wygląda tak:

  <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>

zmień go, aby zawierał dodatkowy tag 'amenity', np.:

  <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>

Następnie przekonwertuj plik za pomocą OsmAndMapCreator. Możesz sprawdzić na stronie OSM, jakie tagi są dobre do użycia, a także zweryfikować, które tagi są obsługiwane przez OsmAnd.