gosmore rebuild bricht ab

Hallo zusammen,

langsam verzweifle ich am gosmore rebuild. Ich habe die europa-latest.osm.bz2 heruntergeladen und möchte sie nun für gosmore compilen. Ich nutze dafür einen PC mit 16GB RAM und Fedora 22, es bricht aber immer an der gleichen Stelle ab:

root@localhost:gosmore# bzcat osm-maps/europe-latest.osm.bz2 | ./gosmore rebuild
Building gosmore.pak using style elemstyles.xml...
Icon public.png not found
Icon public.png not found
Icon religion/synagogue.png not found
Icon religion/mosque.png not found
Icon rendering/landuse/cemetery.png not found
Icon wlan.png not found
Icon rendering/landuse/cemetery.png not found
Processing without relations table
  1 while (xmlTextReaderRead (xml) == 1)
nOther=1365758813 FIRST_LOWZ_OTHER=1996488704
gosmore: jni/libgosm.cpp:2021: int RebuildPak(const char*, const char*, const char*, const char*, const int*): Assertion `bucketsMin1 < (1<<26)' failed.
Abgebrochen (Speicherabzug geschrieben)

Leider weiß ich nicht, wo der Speicherabzug geschrieben wurde. Kurz vor dem Abbruch wird immer mehr in den RAM gepackt:

Mi 10. Jun 17:36:37 CEST 2015
-rw-r--r--. 1 root root 6,1G 10. Jun 17:36 gosmore.pak
              total        used        free      shared  buff/cache   available
Mem:          16030        8191         156           2        7681        7536
###########################################################
Mi 10. Jun 17:46:37 CEST 2015
-rw-r--r--. 1 root root 6,4G 10. Jun 17:46 gosmore.pak
              total        used        free      shared  buff/cache   available
Mem:          16030        8707         156           2        7166        7021
###########################################################
Mi 10. Jun 17:56:37 CEST 2015
-rw-r--r--. 1 root root 6,6G 10. Jun 17:56 gosmore.pak
              total        used        free      shared  buff/cache   available
Mem:          16030        9226         151           2        6653        6502
###########################################################
Mi 10. Jun 18:06:37 CEST 2015
-rw-r--r--. 1 root root 6,9G 10. Jun 18:06 gosmore.pak
              total        used        free      shared  buff/cache   available
Mem:          16030       11136         149           2        4743        4591

Die Datei ist immer exakt gleich groß, wenn ich den Vorgang wiederhole, nämlich:

root@localhost:gosmore# ls -la gosmore.pak
-rw-r--r--. 1 root root 7348779516 10. Jun 18:09 gosmore.pak

Wenn ich z.B. luxembourg-latest.osm.bz2 verwende, dann funktioniert das, ich brauche aber die Karten für die ganze Welt (und planet-latest.osm.bz2 schmiert noch früher ab) und möchte nicht jedes Land einzeln compilen.

Hat jemand einen Tipp oder ggf. eine gosmore.php, die viele einzelne pak files nutzt und nicht nur zwei (eurasien und america) wie in der Datei im SVN?

Vielen Dank,
Lactans

Als erste Idee kam mir, ob Gosmore mit den höheren IS-Nummern der OSM-Daten nicht zurecht kommt, aber laut http://wiki.openstreetmap.org/wiki/64-bit_Identifiers soll das ja seit 2012 klappen.

Es scheint auch so, dass der Hauptentwickler Nic Roets nicht mehr so aktiv ist, zumindest laut Wiki:

http://wiki.openstreetmap.org/wiki/Special:Contributions/Nic

Ich gehe auch mal davon aus, dass du ein 64bit-Linux betreibst, oder? siehe Hinweise auf der Wikiseite zu Gosmore.

Geht es mit kleineren .osm.bz2-Dateien? Zieh mal nur die für das Saarland und guck, was dann passiert.

Danke für Eure Antworten.

Ja, ich nutze ein 64bit Linux ;-).
Und ja, mit kleineren Dateien, z.B. für Luxembourg, geht es.

Ich habe folgenden Artikel gefunden, mit dem konnte ich zumindest schonmal Europa bauen (hat aber knapp 8 Stunden gedauert mit 14GB RAM und 3 Cores in einer VM):
http://forum.openstreetmap.org/viewtopic.php?pid=458546

Hier ist der Link auf eine andere elemstyles.xml enthalten, die ich verwendet habe. Ob es aber nun das tut, was ich möchte, muss ich erst testen.

Hat jemand viele .pak-Dateien im Einsatz und eine entsprechend gosmore.php dafür, um immer die richtige Datei zu nehmen?

Viele Grüße,
Andreas

Richtig gut geht das Aufsplitten halt nur an einer Seegrenze, und da kommt man nicht viel weiter als Amerika - Eurasafrika - Australien/Ozeanien. Und wenn Du nicht rechteckig ausschneidest, wird das Testen im PHP auch aufwendiger…

Hast du mal darüber nachgedacht, evtl. einen der moderneren Router - OSRM oder GraphHopper - zu verwenden? Die werden im Gegensatz zu Gosmore auch noch gepflegt…

Bye
Frederik

Wie kann ich denn Eurasien bauen? Dafür gibt es ja leider kein osm.bz2 file…

Und ja, GraphHopper habe ich überlegt, ist aber kostenpflichtig und daher (vorerst) keine Option. Mit OSRM kam ich nicht klar…

Ein File für die komplette östliche Erdhälfte baust Du zum Beispiel so:

osmosis --read-pbf planet-latest.osm.pbf --bb left=… right=180 top=90 bottom=-90 clipIncompleteEntities=true --write-xml - | bzip2 > eurasien.osm.bz2

Bei dem Wert für “left” nimmst Du -25 oder so, das muss dann eben zu Deinem PHP-Skript passen. Wenn Du nur Eurasien (ohne Afrika und Austrlaien/Ozeanien) willst, wählst Du halt entsprechend andere Grenzkoordinaten, allerdings hast Du, wenn Du mit Rechtecken arbeitest und Indien drin haben willst, immer auch Nordafrika mit dabei. Da musst Du dann evtl. einen Polygon-Ausschnitt machen, das geht auch, aber wird etwas aufwendiger, auch im PHP später.

Zur Bestimmung von Kartenausschnitten ist das hier hilfreich: http://tools.geofabrik.de/calc/#type=geofabrik_standard&bbox=-33.15017,5.160147,191.84983,81.398049&tab=1

Statt osmosis kann man genauso osmconvert nutzen, um einen Ausschnitt aus dem Planet zu erzeugen.

Doku von OSRM ist eigentlich ganz gut, einziger Nachteil vielleicht, dass es recht viel Speicher braucht, um einen weltweiten Routinggraphen aufzubauen. Sowohl OSRM als auch Graphhopper sind Open Source und können kostenlos von Github heruntergeladen, installiert, und benutzt werden.

Bye
Frederik

Sehr gute Tipps, ich baue gerade Amerika und Eurasien. Mal sehen ;-).

Ich kannte bei GraphHopper bisher nur die Website, hatte noch nicht gesehen, dass das auf GitHub verfügbar ist. Vielleicht schaue ich mir das mal als Alternative an.

Ich melde mich dann wieder, wenn osmosis fertig osmosiert hat :wink:

Es hat funktioniert!

Folgende Schritte habe ich gemacht in einer VM mit 4 Cores und 14GB RAM.

  1. Die Datei elemstyles.xml im gosmore Ordner habe ich ersetzt durch diese hier:
    http://www.yournavigation.org/elemstyles.xml.routing

  2. Anschließend habe ich die planet-latest.osm.pbf von hier heruntergeladen:
    http://ftp.heanet.ie/mirrors/openstreetmap.org/pbf/

  3. Das planet-latest.osm.pbf habe ich dann in eurasien.osm.bz2 und america.osm.bz2 aufgeteilt mit diesen Befehlen:

./bin/osmosis --read-pbf osm-maps/planet-latest.osm.pbf --bb left=-26.63 right=180 top=90 bottom=-90 clipIncompleteEntities=true --write-xml - | bzip2 > eurasien.osm.bz2

Dauer: ca. 32h

./bin/osmosis --read-pbf osm-maps/planet-latest.osm.pbf --bb left=-180 right=-26.63 top=90 bottom=-90 clipIncompleteEntities=true --write-xml - | bzip2 > america.osm.bz2

Dauer: ca. 16h

Natürlich muss osmosis dafür installiert sein! Und da gosmore nur auf einer CPU lief und der bzip nur bei ca. 50-60% CPU war, habe ich beide Befehle gleichzeitig laufen lassen.

  1. Nun müssen natürlich noch die .pak Dateien für gosmore erstellt werden. Diese können nur nacheinander gestartet werden, damit die gosmore.pak nicht überschrieben wird:
bzcat2 eurasien.osm.bz2 |./gosmore rebuild

→ gosmore.pak umbenennen in eurasien.pak

bzcat2 america.osm.bz2 |./gosmore rebuild

→ gosmore.pak umbenennen in america.pak

Leider habe ich die Dauer nicht gemessen, lag aber bei eurasien.pak bei >10h und america.pak bei ca. 6h.

Anschließend habe ich die gosmore.php (im yours/www Ordner) noch angepasst, damit die richtige Datei geladen wird:

if ($flon > -180 && $flon <= -26.63) {
        // American continents (North and South)
        $pak = $yours_dir.'/america.pak';
} else {
        // Europe, Asia, Africa and Oceania continents
        $pak = $yours_dir.'/eurasien.pak';
}

Und schon ging es! Danke an alle für die Tipps!