Pl:OsmAndMapCreator
OsmAndMapCreator (OSM i tworzenie map) jest narzędziem Java open-source, które towarzyszy OsmAnd.
Może pobrać kafelki z Mapnika i tworzyć POI, adresy, transport i indeksy routingu z plików OSM (.osm, .bz2, .pbf). Najważniejszą cechą jest tworzenie plików obf
z danych OSM. Pliki obf
są podstawą do renderowania w trybie offline, routingu w trybie offline i szukania na smartphone w trybie offline.
Komentarz Editora: Ten tekst ma być także zrozumiały dla zwykłych ludzi.
Proces tworzenia map
- Pobierz wyciąg danych OSM (PBF format z Geofabrik dla obszaru, który chcesz przekonwertować na
obf
Należy zwrócić uwagę na wysokie zużycie RAM przez OsmAndMapCreator (patrz poniżej). - Jeśli wyciąg jest zbyt duży, trzeba wyciąć mniejszy obszar z niego przy użyciu Osmconvert.
- Utwórz plik
obf
z OsmAndMapCreator. - Skopiuj plik wynikowy
obf
do smartfonu.
Pobieranie OsmAndMapCreator
OsmAndMapCreator nie musi być zainstalowany na komputerze, po prostu tylko Java (Windows) lub OpenJDK (Linux, OSX) musi być zainstalowana. Nie potrzebujesz mieć administrative/root
akcesu, jeśli Java jest już zainstalowana. Jeśli nie wiesz, czy Java jest zainstalowana, po prostu otworzyć okno wiersza polecenia i wpisz polecenie java. Jeśli informacja opisuje niektóre argumenty potrzebne do rozpoczęcia Java i nie pokazuje prostego "file not found" (lub coś takiego), to znaczy,że Java jest zainstalowana.
OsmAndMapCreator może być pobrany ze strony deweloperów. Następnie rozpakuj pobrany pakiet ZIP
w dowolnym folderze. Jeśli używasz uniksowego systemu operacyjnego (OS X, Linux) musisz zrobić plik .jar
wykonywalny.
Tworzenie pojedynczych plików obf
używając graficzny interfejs użytkownika
Rozpoczynanie pracy OsmAndMapCreator przez proste dwukrotne kliknięcie nie jest właściwą drogą. Należy przypisać dla OsmAndMapCreator więcej pamięci RAM niż zwykle to robi Java, ponieważ OsmAndMapCreator nie przerywa działania z powodu braku pamięci.
- Użytkownicy posiadający doświadczenie w użyciu linii poleceń:
Otwórz okno wiersza poleceń, zmień folder (cd) do folderu, w którym jest OsmAndMapCreator.jar
i uruchom komendę java -jar -Xms1G -Xmx6G OsmAndMapCreator.jar
. Następujące numery -Xms
and -Xmx
deklarują ilość pamięci RAM którą można przypisać do OsmAndMapCreator/Java. "M
" znaczy ilość megabajtów, "G
" ilość gigabajtów. Ilość ta zależy od ilości pamięci RAM w komputerze i wielkości pliku pbf
. Szczegóły są poniżej.
- Użytkownicy bez doświadczenia w użyciu linii poleceń:
Otwórz okno menedżera plików (Windows Explorer, Nautilus, itp.), przejdź do folderu, w którym OsmAndMapCreator.jar
jest i dwukrotnie kliknij OsmAndMapCreator.bat
(Windows) / OsmAndMapCreator.sh
(OS X / Linux). Plik bat
lub sh
uruchamia OsmAndMapCreator i otrzymuje określoną ilość pamięci, według powyższego polecenia. Należy dostosować ilość pamięci w pliku bat
/sh
. Szczegóły są poniżej.
Po uruchomieniu OsmAndMapCreator, kliknij na Plik, następnie na Utwórz .obf
z pliku OSM i wybierz pobrany/przycięty plik pbf
Poczekaj, aż OsmAndMapCreator zakończy. Jeśli chcesz utworzyć drugi plik obf
, należy ponownie uruchomić OsmAndMapCreator ponieważ OsmAndMapCreator nie zwalnia używanej pamięci RAM.
Regularne tworzenie plików obf
(z linii poleceń)
Jeśli używasz często pliki obf
na pewno chciałbyś zautomatyzować ten proces. Nawet jeżeli na to nie wygląda, pliki obf
mogą być utworzone przez komendę (a zatem poprzez cronjobs)
Na Debianie dystrybucji Linuksa trzeba także zainstalować libcommons-logowania-java
(inne dystrybucje nie testowane)
Przepływ pracy:
- Pobieramy surowe dane (np. z Geofabrik) lub aktualizujemy istniejące fragmenty za pomocą Osmconvert lub Osmosis.
- Przycinamy surowe dane w razie potrzeby.
- Zmieniamy nazwy surowych plików danych do
COUNTRY.osm.pbf
i przenosimy je do folderu/home/$user/mapbuild/osmand-pbf
- Uruchamiamy OsmAndMapCreator, wszystkie wyciągi zostaną skonwertowane na format
obf
i zapisane w/home/$user/mapbuild/osmand-obf
Jeśli korzystamy z innych folderów niż te, nazwane powyżej, należy zmienić ich nazwy w batch.xml
(patrz poniżej).
Batch.xml
Przed uruchomieniem OsmAndMapCreator należy dostosować odpowiednie ustawienia wewnątrz batch.xml
w folderze OsmAndMapCreator.
Szablon batch.xml
Zamień $user
na swoją lokalną nazwę_użytkownika
<?xml version="1.0" encoding="utf-8"?> <batch_process> <process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness="" osmDbDialect="sqlite" mapDbDialect="sqlite" /> <process directory_for_osm_files="/home/$user/mapbuild/osmand-pbf" directory_for_index_files="/home/$user/mapbuild/osmand-obf" directory_for_generation="/home/$user/mapbuild/osmand-gen" skipExistingIndexesAt="/home/$user/mapbuild/osmand" indexPOI="true" indexRouting="true" indexMap="true" indexTransport="true" indexAddress="true"/> </process/> </batch_process/>
Ustawienia batch.xml
Element XML process_attributes opisuje ustawienia dla tworzenia plików obf
. Możemy po prostu użyć powyższego przykładu batch.xml
bez edycji oprócz dostosowania ścieżki.
Jeśli mamy dużą ilość dostępnej pamięci RAM, można tymczasowo przechowywać bazę danych SQLite w pamięci RAM, zamiast w folderze roboczym (patrz atrybut directory_for_generation w batch.xml
). Tymczasowe przechowywanie bazy danych w pamięci RAM przyspiesza tworzenie plików obf
około 10-50%. Jeśli nie mamy wystarczającej ilości pamięci RAM, nie należy przechowywać tymczasowo bazy danych w pamięci RAM, bo wtedy ma się systemy operacyjne przeskakujące.
Aby przechować tymczasowo bazę danych w pamięci RAM należy zamienić:
<process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness="" osmDbDialect="sqlite" mapDbDialect="sqlite" />
na
<process_attributes mapZooms="" renderingTypesFile="" zoomWaySmoothness="" osmDbDialect="sqlite_in_memory" mapDbDialect="sqlite_in_memory"/>
Uwaga: OsmAndMapCreator potrzebuje bardzo dużą ilość pamięci RAM. Dla pbf
pliku, wielkości 230 MB, potrzeba mieć co najmniej 12 GB pamięci RAM, jeśli nie chcesz zapisać bazy danych na HDD/SSD.
Pozostałe ustawienia w batch.xml
są następujące:
klucz | wartość |
---|---|
directory_for_osm_files | folder w którym są pobierane/zaktualizowane i przycięte pliki pbf
|
directory_for_index_files | folder w którym zostaną zapisane finalne pliki obf
|
directory_for_generation | folder w którym zapisywane są tymczasowe bazy danych SQLite |
indexPOI | utwórz indeks POI (true/false) |
indexRouting | utwórz indeks routingu (true/false) |
indexMap | utwórz indeks map dla renderingu (true/false) |
indexTransport | utwórz indeks transportu publicznego (true/false) |
indexAddresses | utwórz indeks adresów dla wyszukiwania adresu (true/false) |
Tworzenie pliku w formacie obf
OsmAndMapCreator może tylko konwertować pliki w formacie pbf
jeśli są nazwane jako LAND.osm.pbf
i przechowane w directory_for_osm_files!
Aby uruchomić OsmAndMapCreator, należy przejść do folderu, w którym został rozpakowany OsmAndMapCreator i wykonać następujące polecenie (dostosowujemy przydział pamięci w razie potrzeby):
java -Djava.util.logging.config.file=logging.properties -Xms64M -Xmx6300M -cp "./OsmAndMapCreator.jar:lib/OsmAnd-core.jar:./lib/*.jar" net.osmand.util.IndexBatchCreator batch.xml
Wymagania dotyczące pamięci RAM
Wykorzystanie pamięci RAM
OsmAndMapCreator potrzebuje wielokrotność wielkości pliku obf
. Tworzymy plik obf>
dla dużych obszarów tylko wtedy, jeśli komputer ma wystarczającą ilość pamięci RAM. Należy pamiętać, że system operacyjny musi także mieć trochę pamięci RAM. Wystarczy spojrzeć na menedżera zadań, w stanie spoczynku. Pamiętajmy, że systemy 32-bitowe mogą wykorzystać tylko 3,3 GB pamięci RAM.
Poniższa tabela zawiera przykład rozmiarów pliku i zużycia pamięci. Należy pamiętać, że OSM zawiera coraz więcej danych. Dlatego pliki pbf
powiększają się z dnia na dzień.
Adnotacja: Ta tabela nie jest skończona. Możesz dodać swoje wartości, jeśli utworzyłeś plik obf
. Możesz dodać swój RAM i czasu konsumpcji tylko wtedy, gdy nie masz uruchomionych, jednocześnie, żadnych innych programów, z wysokim zużyciem pamięci RAM. (podobne warunki badania)
region | size of PBF file | RAM consumption | RAM assigned at starting OsmAndMapCreator | time consumption | output size of obf file |
---|---|---|---|---|---|
Baden-Württemberg, Germany | 220 MB | ca, 3 h 15 min (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM) | |||
Bayern, Germany | 586 MB | 15 GB | 1 GB–17 GB (-Xms4G -Xmx16G) | 2:35 h:min; (Linux Debian 9, Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz, 20 GB RAM) | 1,1 GB |
Bavaria, Germany | 300 MB | aborted by user after more than 7 h (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM) | |||
Bielefeld | 19 MB | 281 MB | 5,5 min (Linux 32, Intel(R) Pentium(R) 4 CPU 2.66GHz, 2 GB RAM) | ||
Sachsen-Anhalt, Germany | 46 MB | ca. 15–20 min (Linux 64 Bit, Intel Core i5-460M, 8 GB RAM)z | |||
Germany | 2.5 GB | less than 6 GB | 14GB + Harddrive | ~54 hours (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | |
Berlin | 43 MB | 14 GB | ~4 minutes (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | 98 MB | |
Lower Saxony, Germany | 214 MB | less than 6 GB | 14G B | ~40 minutes (Linux 64 Bit, Intel Core i7-4700MQ @ 2.40GHz, 16 GB RAM, mostly idle the complete time of conversion) | 414 MB |
Munich, Germany | 27 MB | ~4 GB | 2 GB (+ 2 GB swap) | ~60 minutes (Linux 64 Bit, Intel Core 2 Duo CPU T8300 @ 2.40GHz, 2GB RAM + 2GB swap, at the begin nothing else worked due to high ram- and hdd-use) | 58 MB |
Rhineland-Platinate, Germany | 157 MB | 4,1 GB | 1–12 GB | 15 min (Win 7 64bit, AMD FX-8350 4 GHz, 16 GB RAM) | |
Brandenburg, Germany | 129 MB | 2,5 GB | 1–4 GB | ca. 1 h, (openSUSE 13.1 64, AMD Athlon(tm) 64 X2 Dual Core Processor 4600+, 7 GB RAM | |
Baden-Württemberg, Germany | 386 MB | 15,2 GB (including swap) | 64 MB–11,8 GB | 4:41 (Linux, Intel Core i5-6400, SSD Crucial BX100 500GB (CT500BX100SSD1), 16 GB RAM), sqlite_in_memory | 562 MB |
Hessen, Germany | 203 MB | ~ 5 GB | 1 GB – 6 GB | 2:30 (Debian 64bit, Intel Core2 Duo P8400, 8 GB RAM) | 375 MB |
Georgia, United States | 174 MB | ~5 GB (plus some swap) | 512 MB–6 GB (-Xms512M -Xmx6144M) | 2.5 h (Windows, Intel Core i7-3612QM @ 2.1GHz, 8 GB RAM) | 265 MB |
Ontario, Canada | 581 MB | 11.2 GB | 1 GB–13 GB (-Xms1G -Xmx13G) | 7 h (Windows, Intel Core i7-3770 @ 3.4GHz, 16 GB RAM) | 695 MB |
Québec, Canada | 352 MB | 9 GB | 1 GB–13 GB (-Xms1G -Xmx13G) | 3 h (Windows, Intel Core i7-3770 @ 3.4GHz, 16 GB RAM) | 490 MB |
Ukraine, whole country | 378 MB | 64 MB–6.8 GB (-Xms64M -Xmx6800M) | 2:42 h (MacOS, Intel Core i5 @ 2.8GHz, 8 GB RAM) | 738 MB | |
Unterfranken, Deutschland | 61,53 MB | 6,4 GB | 4 GB–16GB (-Xms4G - Xmx16G) | 00:08:50 hh:mm:ss (Linux Debian 9, Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz, 20 GB RAM) | 112 MB |
Utah, USA | 65 MB | 5.2 GB | 4 GB-14 GB (-Xms4G -Xmx14G) | 7.5 min (Linux, AMD Ryzen 7 2700 @ 2.2 GHz, 16 GB RAM) | 125 MB |
Obszary duże, wielkości Bawarii (300 MB), nie mogą być konwertowane do formatu obf
jako rozciągnięte. Trzeba podzielić to obszary i przekonwertować każdą część oddzielnie. Dlatego deweloperzy OsmAnd nie oferują całych Niemiec jako obf
(1.8 GB pliku pbg
) do pobrania.
Dostosowanie ilości przydzielonej pamięci RAM
Jest ciąg -Xms64M -Xmx512M w pliku OsmAndMapCreator.bat
i OsmAndMapCreator.sh
.
Zamieniamy te wartości (64M i 512M) na wartości z powyższej tabeli.
Należy pozostawić co najmniej 1,3 GB na system operacyjny, jeśli używamy systemu Windows. Pod Linuksem limit ten zależy od środowiska graficznego, np. 800 MB pamięci RAM dla RAM-hungry Unity.
Przykładowe obliczenia:
(1) | zainstalowana pamięć RAM | 4 GB |
(2) | Zużycie pamięci RAM w stanie gotowości (w zależności od systemu operacyjnego, patrz Menedżer zadań) | 1.3 GB |
(3) | różnica pomiędzy (1) a (2) | 2.7 GB |
(4) | minimalne przypisanie RAM (wartość po -Xms) | 200 MB (piszemy -Xms200M.) |
(5) | maksymalne przypisanie RAM (wartość po -Xmx) | 2.5 GB (Nie należy stosować separatora dziesiętnego, piszemy -Xmx2500M.) |
Uwaga: Nie może być pustego miejsca między -Xms lub -Xmx a wartością liczbową.
Kopiowanie pliku obf
do smartfonu
Finalne pliki obf
są przechowywane w folderze oprogramowania OsmAnd, w telefonie. Można zmienić lokalizację folderu aplikacji w ustawieniach OsmAnd w sekcji Generalne. /mnt/sdcard/osmand jest dobrą lokalizacją.
(Uwaga! Położenie na karcie SD może być inne niż /mnt/sdcard.)
Jeśli chcemy zapisać pliki obf
na /mnt/sdcard/osmand, musimy ustawić /mnt/sdcard (bez osmand) jako folder Storage directory. Należy wziąć pod uwagę, że Android jest oparty na Linuksie i wielkość liter jest istotna! /mnt/extSdCard i /mnt/extsdcard, to dwa różne foldery!
Zobacz też
- Utwórz mapę dla siebie w trybie offline (en) - instrukcja na OsmAnd Wiki z informacjami o zużyciu pamięci i sqlite_in_memory