Hier möchte ich meine Erfahrungen zur Vorbereitung von Offline-Karten für Schweden einstellen, da ich doch eine ganze Weile gebraucht habe, um eine Lösung zu finden.
Konkret wollte ich die Topomaps von Landmäteriet in Locus Maps (und OruxMaps) verwenden. Früher konnte ich diese aus Locus Maps Classic direkt downloaden. Das geht nun nicht mehr, da Landmäteriet jetzt neu den Zugang verändert hat, und man sich vor dem Download registrieren muss und der Zugriff mit Username und Passwort erfolgt.
1. Konto bei Landmäteriet anlegen
Als erstes muss man sich bei "Landmäteriet" registrieren (https://opendata.lantmateriet.se/#register) für den Dienst "geotorget". Ich habe das Schritt für Schritt gemacht, indem ich die schwedische Seite (ich kann leider kein Schwedisch) am Computerbildschirm mit dem Handy gefilmt und per "Google Lens" (Translate) übersetzt habe. Direkt übersetzt anzeigen lassen (via translate.google.com) geht nicht. Die Registrierung erfordert ein paar Schritte, ist aber nicht schwierig, und am Ende erhält man dann eine Mail mit einem Link zur Kontoaktivierung zugesandt.
2. Mobile Atlas Creator herunterladen und installieren
Als nächstes habe ich "Mobile Atlas Creator" (MOBAC) heruntergeladen (https://mobac.sourceforge.io/). Das ist eine Java-App, mit der Offline-Karten aus unterschiedlichen Quellen erzeugt werden können.
3. Landmäteriet-Tileserver als Kartenquelle hinzufügen
Als nächstes muss nun die Landmateriät-Kartenquelle eingetragen werden. Leider ist das nicht so einfach möglich, da Username und Passwort bei den Zugriffen auf den Tile Server mitgeschickt weden müssen. Ich habe da ziemlich viel Zeit gebraucht, um eine Lösung zu finden. Für den Zugriff im Browser kann die Authentifizierung in die URL packen (https://username:password@maps.lantmateriet.se/open/topoweb...), wobei man das "@" der E-mail-Adresse, die als Username verwendet wird, als "%40" schreiben muss. In MOBAC kann man Kartenquellen als .xml-Datei spezifizieren, dies klappt jedoch mit dieser Form der Authentifizierung nicht. Die Lösung war am Ende, die Kartenquelle als ".bsh"-Datei anzulegen.
Dazu legt man Im Verzeichnis "mapsources" eine Datei "landmat.bsh" mit folgendem Inhalt an:
import java.net.URL;
// Name, der in MOBACs Kartenauswahl angezeigt wird
name = "Sweden as BSH";
// Zoom levels
minZoom = 5;
maxZoom = 15;
// Dateiformat der Kacheln
tileType = "png";
// Methode, die die URLs der Kacheln zurückliefert.
// 'z' = zoom level, 'x' und 'y' sind die Kachelkoordinaten
String getTileUrl(int z, int x, int y) {
String url = "https://maps.lantmateriet.se/open/topowebb-ccby/v1/wmts/1.0.0/topowebb/default/3857/" + z + "/" + y + "/" + x + ".png";
return url;
}
// Methode, welche die Authentifizierung hinzufügt (xxxxxxxx muss ersetzt werden!)
void addHeaders( java.net.HttpURLConnection conn) {
conn.addRequestProperty("Authorization", "Basic xxxxxxxxx");
}
'xxxxxxxx' in der Datei oben muss dabei durch den Benutzernamen und das Passwort ersetzt und "base64"-kodiert werden. Beim Kachelzugriff werden diese dann als http-Header mitgesendet (sogenannte "Basic Authentication", in der die Credentials nicht verschlüsselt sind. Dies ist trotzdem sicher, da der Zugriff transportverschlüsselt via https erfolgt).
Ich habe die Base64-Kodierung bei mir unter Linux auf der Kommandozeile so gemacht:
echo "username:password" | base64
Das ergibt dann eine Zeichenfolge, die oben eingesetzt werden muss (mit "username:password" z.B. dXNlcm5hbWU6cGFzc3dvcmQ=, aber natürlich müssen hier der persönliche Usernamen und das persönliche Passwort eingesetzt werden). Es gibt auch Online-Tools zur Base64-Verschlüsselung (z.B. hier: https://www.base64encode.org/), aber im Allgemeinen ist es keine gute Idee, Usernamen und Passwörter im Klartext in irgendeine Webseite zu kopieren.
4. Atlas erzeugen
Als nächstes wird MOBAC gestartet, und die neue Kartenquelle sollte nun in der Auswahl angezeigt werden. Man kann nun im Menu "Atlas > New Atlas" wählen und ein Dateiformat auswählen (z.B. "mbtiles sqlite" oder "OruxMaps sqlite"). Dann wählt man in der Karte rechts einen Ausschnitt aus, wählt die Zoomstufen aus, und klickt links auf "add selection". Sehr grosse Ausschnitte bricht man am besten in Teilbereiche auf. Hier ein Beispiel für den südlichen Bereich des nördlichen Kungsleden.
Bei den Zoomstufen habe ich bei "14" aufgehört, da man hier eigentlich bereits alle Details sieht, und der Atlas sonst viel zu gross wird.
Falls MOBAC reklamiert, dass ein Layer mehrfach vorhanden sei, so ist der Ausschnitt zu gross und die Karte muss in mehreren Teilen angelegt werden. Das ist aber kein Problem, da die Karten-Apps automatisch die notwendigen Karten laden und kombiniert anzeigen.
Als nächstes klickt man auf "Create Atlas" und wartet, bis der Atlas fertig generiert wurde.
5. Atlas auf Handy kopieren
Nun muss der Atlas nur noch aufs Handy kopiert werden.
Für Locus Maps habe ich bei mir (Android) die ".mbtiles"-Dateien nach "Internal shared storage > Android > data > menion.android.locus.pro > files > Locus > maps" kopiert.
Für OruxMaps habe ich das von MOBAC erzeugte Verzeichnis nach "Internal shared storage > Android > data > com.orux.oruxmapsDonate > files > oruxmaps > mapfiles" kopiert.
Nun sollten die Karten in den beiden Apps angezeigt werden. Hier die Ansichten in LocusMaps (links) und OruxMaps (rechts), in der höchsten Zoomstufe.