Hallo,
ich versuche seit ca. 1 Woche, einen Full Planet Import mit Osmosis zu machen, bisher allerdings ohne Erfolg. Hier meine Systeminfos:
- Core i7-4790
- 32GB RAM
- Seagate ST6000NM0024 Harddisk exclusiv für Postgres (keine SSD!)
- Windows7 64bit
- Postgres 9.4.1 (PostGIS 2.1.5)
- Osmosis Version 0.43.1
Bisher hatte ich in meine DB nur kleinere Gebiete bis zur Größe von Deutschland importiert, das klappt gut. Den vollen Planeten bekomme ich nicht importiert, weil entweder
a) der Import ewig dauert. Ich benutze dazu den Dump Ansatz ohne “enableBboxBuilder=yes enableLinestringBuilder=yes”, d.h. diese Daten werden dann im pgsnapshot_load_0.6.sql SQL Skript durch die folgenden Statements berechnet:
-- Comment these out if the COPY files include bbox or linestring column values.
-- Update the bbox column of the way table.
UPDATE ways SET bbox = (
SELECT ST_Envelope(ST_Collect(geom))
FROM nodes JOIN way_nodes ON way_nodes.node_id = nodes.id
WHERE way_nodes.way_id = ways.id
);
-- Update the linestring column of the way table.
UPDATE ways w SET linestring = (
SELECT ST_MakeLine(c.geom) AS way_line FROM (
SELECT n.geom AS geom
FROM nodes n INNER JOIN way_nodes wn ON n.id = wn.node_id
WHERE (wn.way_id = w.id) ORDER BY wn.sequence_id
) c
);
Für Deutschland laufen beide UPDATEs in wenigen Stunden durch, beim vollen Planeten hab ich nach 5 Tagen abgebrochen.
b) der Import mit Out-of-Memory abbricht. Da das Erstellen der bbox und linestring Spalten durch Postgres nicht klappt, bleibt noch die Option, beides durch Osmosis schon in den Dump Files vorberechnen zu lassen. Das funktoniert aber auch nicht, weil mir der Speicher ausgeht.
In der Windows Console habe ich vor dem Aufruf von Osmosis den Java Heap hochgesetzt:
set JAVACMD_OPTIONS=-Xmx32G -XX:-UseGCOverheadLimit
Und bei Osmosis benutze ich im Vergleich zu (a) die folgenden Switches zusätzlich:
enableBboxBuilder=yes enableLinestringBuilder=yes nodeLocationStoreType=InMemory
Nach einiger Zeit kommt es dann zu folgendem Fehler (zum Zeitpunkt des Abbruchs hat “nodes.txt” eine Größe von ca. 232GB, “users.txt” ca. 5MB):
SEVERE: Thread for task 1-read-xml failed
java.lang.OutOfMemoryError: Java heap space
at org.openstreetmap.osmosis.pgsnapshot.common.InMemoryNodeLocationStore.addLocation(InMemoryNodeLocationStore.java:132)
Hat jemand noch eine Idee, wie ich den Planeten importiert bekomme? Oder ist mein Hardware Equipment einfach zu schlecht? Das finde ich insofern verwunderlich, weil - wenn man diversen Postings glauben darf - vor 2 bis 3 Jahren noch 16GB RAM für den In-Memory Import Ansatz (b) ausreichend waren. Und jetzt krieg ichs nichtmal mit dem doppelten Speicher hin.
Grüße,
Pete.