mkgmap erzeugt Fehler bei bestimmten Kartenkacheln (1 Kachel Kroatien)

Hallo OSM-Spezialisten,

mir bricht seit letzter Woche die Erstellung einer Garmin-Karte mit mkgmap.jar immer wieder ab. Dieses aber nur bei ganz bestimmten Regionen. Konnte eingrenzen auf 1 Kachel bei Kroatien (Geofabrik croatia-latest.osm.pbf) nördlich von Split mit Sibenik, Primosten, Rogoznica. Splitter.jar (r580) splitter fehlerfrei. Mit mkgmap-Option --keep-going wird eine Karte erzeugt, aber eben jene besagte Kachel fehlt dann. Ich habe ich letzten Versionen von Splitter und mkgmap probiert, sowohl mit Windows als auch Mac. Selbst wenn man nur die besagte Kachel Nummer 7 direkt aus dem Splitter-Ordner mit mkgmap ohne jegliche Optionen generieren will gibt es immer wieder folgenden Fehler.

Ein Anwender meiner Karten-Backmischung berichtet von Polen den gleichen Fehler.

Gibt es Änderungen, die ich zu berücksichtigen habe?
Muss ich mich an die Entwickler von Splitter/mkgmap wenden?
Hat jemand Fehler in einigen Karten-Daten erfasst (Rheinland-Pfalz und Liechtenstein werden problemlos generiert)?

java.lang.ArrayIndexOutOfBoundsException: 0
	at uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryLocationPreparer.getFirstPart(BoundaryLocationPreparer.java:122)
	at uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryLocationPreparer.getName(BoundaryLocationPreparer.java:116)
	at uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryLocationPreparer.parseTags(BoundaryLocationPreparer.java:60)
	at uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryLocationPreparer.getPreparedLocationInfo(BoundaryLocationPreparer.java:92)
	at uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryQuadTree.<init>(BoundaryQuadTree.java:140)
	at uk.me.parabola.mkgmap.reader.osm.ResidentialHook.buildResidentialBoundaryTree(ResidentialHook.java:100)
	at uk.me.parabola.mkgmap.reader.osm.ResidentialHook.end(ResidentialHook.java:55)
	at uk.me.parabola.mkgmap.reader.osm.OsmReadingHooksChain.end(OsmReadingHooksChain.java:78)
	at uk.me.parabola.mkgmap.reader.osm.o5m.O5mBinMapDataSource.load(O5mBinMapDataSource.java:49)
	at uk.me.parabola.mkgmap.reader.osm.OsmMapDataSource.load(OsmMapDataSource.java:140)
	at uk.me.parabola.mkgmap.main.MapMaker.loadFromFile(MapMaker.java:154)
	at uk.me.parabola.mkgmap.main.MapMaker.makeMap(MapMaker.java:52)
	at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:265)
	at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:261)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Vielen Dank für Eure wertvollen Rückmeldungen.

Gruß
Scotti

Die Kachel in Kroatien ist bei mir auch gerade defekt. Sowohl bei der Kroatienkarte, als auch bei der Europakarte (speichenkarte.de)
Andere Defekte habe ich nicht entdeckt, was aber nicht unbedingt etwas bedeutet.

Ich bin der Sache noch nicht weiter nachgegangen.
Man könnte erst mal eingrenzen, ob es an den Neuerungen in mkgmap liegt, die in letzter Zeit dazu kamen. Also einfach eine etwas ältere Version probieren.
Eventuell liegt das Problem in der “bounds” Datei? Da könnte man auch einmal mit einer älteren Variante testen.

Ansonsten lohnt eine Anfrage an die mkgmap Mailing List. In der Regel ist man dort sehr hilfsbereit.

westlich und südlich von “Rzeszów” sind ebenfalls 2 Kacheln defekt.

Vielen Dank für die schnelle Antwort. Auch ältere Versionen von mkgmap erzeugen diesen Zustand. Auch älteren Splitter probiert. Mit oder ohne bounds, mit precompiled bounds.zip oder frisch selbst kompiliert, der Zustand bleibt unverändert. Somit tippe ich darauf, mkgmap muss sich den Daten anpassen. An deren Mailingliste hab ich auch geschrieben. Abwarten.

In meiner frischgebauten Karte (mit anderem Stil) ist keine Kachel in der Gegend defekt.

Von der Fehlermeldung her würde ich sagen das ist irgendeine Renderregel, die prüft ob etwas innerhalb eines residential Polygons liegt, evtl. in Verbindung mit defekten Daten. (Solche Regeln kommen in meinem Stil nicht vor).

bye, Nop

Möglich. Dann aber auch ohne Style, also mit mkgmap-Default-Style. Hab zum Testen sämtliche Einstellungen entfernt. Also werde ich mir mal die Styles genauer anschauen.

Vermutlich liegt es an der recht neuen Abfrage mkgmap:residential=*, die prüft, ob ein Element innerhalb eines residential-polygons liegt.
Die Prüfung kann man abstellen, wenn das nicht braucht:
x-residential-hook=false (als Option setzen)

Ich habe die fragliche Kachel an die mkgmap Liste gemailt.

Besten Dank. Werde mal mit dieser Einstellung erneut testen. Aber nicht mehr heute. Ich warte auch auf das mkgmap-Team und deren neue Versionen. Schönen Abend noch.

mkgmap-r3846 prevent another possible ArrayIndexOutOfBoundsException in BoundaryLocationPreparer.
13 mar 2017
mkgmap-r3845 prevent possible ArrayIndexOutOfBoundsException in BoundaryLocationPreparer.
13 mar 2017

Jetzt funktioniert Kroatien auch mit x-residential-hook. :slight_smile:

Klasse. Danke. Hab ich auf der mkgmap-Seite schon gelesen. Teste ich aber erst morgen.

Wozu soll das gut sein?

Wenn z.B. jemand Straßen innerorts schmäler zeichnen will als außerorts (s. anderer Thread)

Eine andere Anwendung bestünde darin, einzelne Häuser innerhalb eines landuse=residential nicht zu rendern, um
dadurch die Größe der Karte zu verringern und evtl. auch die Reaktionszeit des Navis in Gegenden mit sehr vielen
building=* ways.
Bei Straßen ist zu beachten, daß landuse=residential oft gerade nur bis nahe an die Staße laufen.

Da wäre es vielleicht auch interessant zu wissen, ob eine Strasse innerhalb eines place=* polygons liegt.

Gerd

Vielen Dank an alle Beteiligten, insbesondere an die Programmierer von mkgmap.
Mit Version r3846 funktioniert die Kartenerstellung bei der betroffenen Region wieder einwandfrei. Weitere Regionen werden demnächst neu erstellt und gleichzeitig getestet.
Schönen Tag und viele Grüße
Scotti