x osm-Dateien zu einer Datei zusammenfassen?

Nahmd,

Sind die Objekte möglicherweise nicht nach Id sortiert?

Dann muss ein Programm die sortieren, um die Doubletten zu finden. Und am einfachsten sortiert es sich, wenn alle Objekte im Speicher liegen. :slight_smile:

Gruß Wolf

Wieviel Speicher steht denn deinem System (bzw. deinem User) zur Verfügung? Ich hatte mal auf einer extrem eingeschränkten Cloud Testinstanz mit 400MB (!) Speicher auch Probleme und musste mit dem Parameter --hash-memory den maximal zu belegenden Speicher solange nach unten schrauben, bis es gepasst hat. Wie das funktioniert ist unter “osmconvert --help” im Abschnitt “Tuning” gut beschrieben.
Edit: Ah, ich sehe gerade, ich hatte das für osmfilter eingesetzt, sollte aber mit osmconvert analog laufen.

Hallo Netzwolf und mmd,

Ne, daran liegt es (glaube ich) nicht, wenn ich nämlich “per hand” (osmconvert x.osm b .osm u.osm -o=xbu.osm) ausführe, klappt es problemlos.

Also das hier ist ein Windows 7 x64 System mit 8gb Arbeitsspeicher. Also ich glaube es müsste eigentlich ausreichend sein. ( Wenn ich mir die Extrakte der GEofabrik merge (D-A-CH) klappt es ja auch und das sind eindeutig mehr Daten :wink: )

Aber ich werde es mal probieren. Vielen Dank für den Hinweis.

Gruß

Jan

Kurzer Blick in http://m.m.i24.cc/osmconvert.c verrät, dass das eigentlich nicht wirklich etwas bringt. Warum?

Pro Datei wird ein konstanter prefetch-Puffer von ~183MB angefordert, der sich auch nicht über Parameter konfigurieren lässt. Spätestens bei 10-15 OSM-Dateien dürfte dann Schluß sein, denn das Binary für Windows ist 32bit, kann also mit ganzen 8GB Speicher nicht wirklich etwas anfangen. Die Grenze dürfte irgendwo zwischen 2GB und 3GB liegen. Da hilft nur ein Aufteilen in kleinere Pakete, oder Marqqs kann das sonst irgendwie korrigieren.

Nahmd,

Oder das kleine Perlscript oben. Das liest nur jeweils ein OSM-Objekt aus den Streams und kann – solange die Kommandozeile nicht zu lang wird und das Betriebssystem Filehandles rausrückt – auch hunderte bis tausende von Dateien mergen.

Gruß Wolf

Hallo Netzwolf,

Hab ich mir mal heruntergeladen bzw. kopiert! Ich nutze “ActivePerl 5.16.2 Build 1602 (64-bit)” und jetzt bekomme ich folgende Fehlermeldung:

file: *.osm at osmmerge.pl line 26.

Ich starte das Skript wie im Kommentarheader beschrieben.

Oh man, ich hätte nicht gedacht, dass mein “kleines” Problem/Anliegen solche “Wellen” erzeugt!
Vielen herzlichen Dank euch allen für die Hilfe.

Gruß

Jan

Nahmd.

Das Windos erweitert das “.osm” nicht zu allen Dateien mit der Endung “.osm”; das Skript bekomme das “.osm” direkt geliefert statt eine Liste aller Datein; und kann die Datei “*.osm” natürlich nicht öffnen.

Das Globbing ist jetzt eingebaut.

Sorry + Gruß Wolf

Edit: Futur→Perfekt

Vielen Dank für deine Mühe Netzwolf, ich stehe tief in deiner Schuld!

Es werden jetzt die zu bearbeitenden Daten ausgegeben, allerdings ist die Zieldatei nun leer ;(

Zeig mal die ersten paar Zeilen von einer Datei.

Gruß Wolf

Hallo Netzwolf,

sorry für die späte Antwort, aber die Arbeit hat mich abgehalten :wink:

Also ich vermute jetzt, du meinst die osm Datei. Es ist eine normale osm-Dateivon der Overpass-Api:


<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
<meta osm_base="2013-02-11T19:33:02Z"/>
   ...
</osm>

Gruß Jan

Hallo Jan

Eigentlich interessant wären Anfang und Ende von dem was dazwischen steht (deine “…”).
Übrigens: Hast du dir von der Overpass-API auch die Meta-Daten ausgeben lassen? Ohne die Meta-Daten (Version, User, Zeitstempel, …) könnte das mit dem Mergen eventuell schwierig sein.

Edbert (EvanE)

Hallo Edbert,
oh sorry, wusste ich nicht :wink: Also dann alles:


<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
<meta osm_base="2013-02-11T19:33:02Z"/>

  <node id="243637686" lat="48.8626454" lon="8.2150067">
    <tag k="addr:city" v="Rastatt"/>
    <tag k="addr:country" v="DE"/>
    <tag k="addr:housenumber" v="1"/>
    <tag k="addr:postcode" v="76437"/>
    <tag k="addr:street" v="Karlsruher Straße"/>
    <tag k="amenity" v="fuel"/>
    <tag k="brand" v="Jet"/>
    <tag k="fuel:diesel" v="yes"/>
    <tag k="fuel:e10" v="yes"/>
    <tag k="fuel:octane_95" v="yes"/>
    <tag k="fuel:octane_98" v="yes"/>
    <tag k="name" v="Jet"/>
    <tag k="wheelchair" v="limited"/>
  </node>

</osm>

Ah, ne Metadaten lasse ich mir nicht ausgeben. Versuche ich gleich mal. Oh man, wenn dass der Fehler ist/war, ist es mir schrecklich peinlich…

So jetzt das ganze nochmal mit Metadaten versucht, aber leider das selbe Ergebnis:
zu bearbeitende Dateien werden aufgelistet, Zieldatei ist leer bzw. enthält nur das “Grundgerüst”…

Nahmd,

Ist mir das peinlich. :frowning:

Normalerweise lese ich die OSM-Daten mit einem XML-Reader; daher war mir nicht klar, in wieviel Variationen z.B. der Header kommt. :roll_eyes: Ich hab den Code in meinem alten Beitrag aktualisiert und ihn zusätzlich ins Netz gestellt. Der frisst jetzt die Beispieldatei.

Nachtrag: Das Skript ist jetzt auch zertifiziert!:
:sunglasses:

Wenn die Aufgabenstellung “große Menge von OSM-Dateien mergen” häufiger vorkommt, so bitte Bescheid sagen: dann baue ich eine saubere Version in Java.

Gruß Wolf

Hallo Netzwolf!

10000000000 fachen Dank für deine Mühe, jetzt klappt es!

Gruß Jan