Openstreetmap GPS-Tracks in PostGIS mir shp2pgsql

Hallo zusammen,

Ich hab ein Problem damit Openstreetmap GPS-Tacks (.gpx nicht .osm wie die Kartendaten) in PostGIS zu importieren.

Also eigentlich geht das wohl so, dass man das .gpx file erst mit gpx2shp ins Shape Format umwandelt und dann mit shp2pgsql ein sql-file erzeugt das man dann laden kann.

Schritt 1 (gpx -> shp) klappt ohne Probleme.
Beim 2ten (shp -> sql) Schritt bekomm ichs einfach nicht gebacken, dass ordentliche Insert-Anweisungen erzeugt werden. Die Tabelle wird ordentlich Created aber die Daten nicht eingefügt.

Meine Befehle waren folgende:

gpx2shp 670957.gpx
shp2pgsql 670957_trk test > foo.sql

foo.sql sieht dann so aus:

BEGIN;
CREATE TABLE "test" (gid serial PRIMARY KEY,
"shapeid" int4,
"name" varchar(32),
"cmt" varchar(255),
"desc" varchar(255),
"src" varchar(255),
"link" varchar(255),
"type" varchar(32),
"l(m)" float8,
"t(sec)" float8,
"s(km/hour)" float8,
"points" int8);
SELECT AddGeometryColumn('','test','the_geom','-1','MULTILINESTRING',2);
INSERT INTO "test" ("shapeid","name","cmt","desc","src","link","type","l(m)","t(sec)","s(km/hour)","points",the_geom) VALUES ('0','ACTIVE LOG 004',NULL,NULL,NULL,NULL,NULL,'28878.4231','2471.00','42.07','649','SEHR_LANGE_HEX_ZAHL');
END;

Keine Ahnung warum keine anständigen INSERT-Anweisungen generiert werden.
Die müsste ja im Prinzip sehr viele Tupel, in meinem konkrete .gpx-file so um die 1000, einfügen.
Statt dessen schein irgendwie alles als eine lange Hex-Zahl interpretiert zu werden und in ein Tupel gepackt zu werden.

Wär super wenn mir da jemand einen Tipp geben könnte, bin da schon den halben Tag dran und nervt doch schon so langsam…

Falls es jemand austesten will die GPS-Tracks von Openstreetmap gibts hier OpenStreetMap | Public GPS traces .

OS ist Ubuntu 9.10, Postgres 8.3.

Bin für jeden Hinweis dankbar.

Schönen Abend noch,
Frank

Die ‘SEHR_LANGE_HEX_ZAHL’ ist die Geometrie im WKB-Format. Mit der Option -w kannst du das im menschenlesbaren WKT-Format anzeigen lassen, aber zur Leserlichkeit trägt das auch nicht bei :wink:
Bei Gelegenheit könntest du auch eine Fehlermeldung posten, warum das nicht geht. Postgres meckert normalerweise rum, wenn was gegen die Wand fährt. Hier könnte es z.B. an der -1 als srid liegen, k.A. ob das gpx eine srid generiert.
Und noch ein Tip: du kannst die Ausgabe von shp2pgsql auch direkt in die Db pipen…

Gruß Uwe

also des mit dem -w ist schonmal interessant in der Hex Zahl verbergen sich immer die lon/lat Paare - also die Position in Grad.
Eine Fehlermeldung gib es nicht, es wird des Datenbank Schema angelegt und ein Tupel mit dem kompletten Positionsdaten des gesamten Files befüllt (die schon erwähnte Hex-Zahl).

Was ich für meine Anwendung bräuchte wäre sowas in der Art:

aus .gpx Daten der Form

Header und Meta-Daten
   <trkpt lat="-31.6106630" lon="152.4143480">
        <ele>683.2000120</ele>
        <time>2010-03-25T04:05:59Z</time>
      </trkpt>
      <trkpt lat="-31.6106330" lon="152.4142980">
        <ele>683.5000000</ele>
        <time>2010-03-25T04:06:28Z</time>
      </trkpt>
      <trkpt lat="-31.6106730" lon="152.4142880">
        <ele>685.2000120</ele>
        <time>2010-03-25T04:07:04Z</time>
      </trkpt>
        usw...

würde ich gern einen Tabelle der Form

Time | lat | lon

2010-03-25T04:05:59Z | -31.6106630 | 152.4143480
2010-03-25T04:06:28Z | -31.6106330 | 152.4142980
2010-03-25T04:07:04Z | -31.6106730 | 152.4142880


erzeugen. Wichtig wären also Zeit und Position - der Rest wär egal, kann drin sein muss aber nicht.
Habe gehofft, dass des mit shp2pgsql geht…
Komischerweise wird ja bei meinem momentanen Output (die lange Hex Zahl), die timestamps total ignoriert.
Deshalb habe ich noch ein bisschen Hoffnung, dass ich da doch noch was falsch mache und es noch klappen kann.
Ansonsten werd ich wohl den Parser von gpx -> sql selber schreiben müssen.

Gruß,
Frank

Nein, die Timestamps werden nicht beachtet, da die Geometrie für shp2pgsql hier die ganze Linie ist und nicht die einzelnen Punkte mit dem Attribut Timestamp.
Eventuell könnte dir noch QGis eine Hilfe sein, das kann gpx-Files lesen und darstellen, ich habe allerdings damit noch nicht viel gemacht. Aber vielleicht kann das sowas auch aufsplitten.

Grüssle Uwe

  1. Öffne mit QGIS 1.4 direkt die GPX und wähle “track_points” für die einzelnen Punkte aus.

  2. Ein Rechtsklick auf den neuen Layer und “Als Shapefile abspeichern” macht aus dem ganzen eine SHP. In der Attributtabelle sollten alle Felder wie zB. die Zeit zu sehen sein.

  3. Falls du die Daten in PostGIS brauchst klick auf den Blauen Elefanten in der Symbolleiste und importiere die SHP-Datei.


    Achte darauf die richtige SRID für WGS84 (4326) anzugeben sofern du geografisch vergleichen oder weiter bearbeiten willst.

Edit: Die richtigen Zeiten sind natürlich nur vorhanden sofern die GPX-Datei nicht anonymisiert wurde.
Edit2: Zur anzeige der Geometrie in klartext einfach eine Abfrage mit ST_AsText(geometry) erstellen. zB. “SELECT ST_AsText(the_geom), time FROM DeineTabelle;”

Welcome to the Quantum GIS Project