Zwei Tabellen zu einer Vereinigen

Hallo zusammen,

ich habe mal wieder ein Problem.
Ich besitze zwei Tabellen in PostGIS.

1. Tabelle: point2d

  1. Spalte: id (integer)
  2. Spalte: GEOMETRY (MULTIPOINT)

2. Tabelle: line2d

  1. Spalte: id (integer)
  2. Spalte: GEOMETRY (MULTILINESTRING)

Ich habe mir nun eine dritte “test” Tabelle angelegt:

  1. Spalte: id (integer)
  2. Spalte: GEOMETRY (GEOMETRYCOLLECTION)

Ich möchte den Inhalt der ersten beiden Tabellen in die dritte Tabelle schreiben.

Folgenden Befehl habe ich ausgeführt:
" Insert into test Select id, the_geom from point2d; "


Folgender Fehler tritt auf:

" FEHLER: neue Zeile für Relation »test« verletzt Check-Constraint »enforce_geotype_the_geom« "

Wie muss ich den SQL-Befehl umschreiben, damit ich den Constraint einhalte?

Hat jemand ein Idee?

Vielen dank.

mfg
Gregor

Hilft Dir das hier weiter?
Nabble - Mapserver - User - MULTIPOINT and POINT in same geometry column

Vielen dank für den Link.

Ich habe den Check-Constraint gelöscht. Nun funktioniert es.
Nun kann ich allerdings alles in der Spalte speichern: POINTS, LINES, POLYGONS und GEOMETRYCOLLECTIONS.

Sehe ich es richtig, dass ich den Constraint nciht unbedingt benötige?


mfg

Gregor

Ich ab von dem GIS-Zeugs keine Ahnung, aber vielleicht kommt ja gleich der gisman um die Ecke…

Andreas

Der Constraint legt fest, welche Geometrien du in einer Spalte ablegen kannst, wie du schon festgestellt hast. Solltest du was anderes vorhaben, als mittelfristig fürchterliches Chaos zu veranstalten, ist er wichtig. Schliesslich schaut deine Clientapplikation meist in der Tabelle geometry_columns nach was da zu finden sein soll, und prüft nicht jede Geometrie einzeln. PostGIS selbst dürfte es primär egal sein was du da reinschreibst(ohne den Constraint natürlich), solange du keine geometrieabhängigen Funktionen verwendest.
Du könntest eine Geometrycollection z.B. mit dem Befehl ST_Collect erzeugen, dann gehst du vermutlich vielem aus dem Weg :wink:

Gruß Uwe

Hallo zusammen

Vielen dank an Gisman, es funktioniert mit st_collect.
Man muss den Constraint nicht löschen!

Meine Lösung:

INSERT INTO w2d SELECT id1 , astext(st_collect(geometry1)) FROM point2d GROUP BY id1;

In der Tabelle point2d sind in der Geometriespalte MULTIPOINT´s gespeichert.
Nach dem SQL Befehl sind in der Geometriespalte GEOMETRYCOLLECTIONS gespeichert.

Vielen dank für die Hilfe.

Gregor

Hallo Gregor,

alternativ kannst Du die dritte Tabelle auch mit dem Geometrietyp ‘GEOMETRY’ erstellen. Der Typ ‘GEOMETRY’ erlaubt, die Tabelle mit allen Geometrietypen zu füllen: POINT, MULTIPOINT, LINESTRING, MULTILINESTRING, …
Die Überlegung von Uwe, welche Clientapplikation ist in der Lage den Inhalt der Tabelle zu deuten, wirst Du berücksichtigen müssen.
Die Clients OpenJUMP, gvSIG und QGIS haben hier kein Problem.

Gruß
Harald