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?
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…
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.
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.
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
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.
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';
}