neue geometrie zu geometrycollection spalte

Ich habe fogende Ausgangslage: Eine Tabelle mit Polygonen (Grundstücke) und eine weitere mit Linien (Straßennetz). Diese habe ich inzwischen so verschnitten, dass das Staßennetz so aufgesplittet wurde, dass in jedem Grundstück nur noch das beinhaltete Straßenstück liegt. id von Tabelle Polygon und Staßenstücke passen zusammen und liefern das gewünschte ergebnis.
Ich möchte nun in die Tabelle mit den Grundstücken auch die Straßenstücke mitspeichern, d.h. eine Geometrycollection aus Polygon und Linie. Wie bekomme ich aber Linien in die schon vorhandene Geometriespalte von der Polygon tabelle? Die geometriespalte der Tabelle Polygons ist nur als “geometry” definiert, sollte also alle Typen aufnehmen können. Wenn ich folgendes SQL Statement probiere:

Insert INTO polygons(the_geom) Select astext(the_geom) from strasse, polygons WHERE strasse.id = polygons.id;

kommt die Fehlermeldung
ERROR: column reference “the_geom” is ambiguous

Bitte um konkrete SQL Hilfe, wie ich das am Besten handhabe!
Noch eine Kleinigkeit: Stimmt es, dass in QGIS keine Geometrycollections angezeigt werden können? Bei mir funkt es jedenfalls nicht…
Danke im Voraus, Jasmin

Wenn du die Geometriespalten herkömmlich mit addgeometrycolumn angelegt hast, enthalten sie nur eine Geometrie.
Wenn du sie von Hand anlegst, kannst du alles reinmachen, was aber dazu führt, das dein GIS-Client sich in der Regel weigert das darzustellen, bzw Probleme auftreten. Das gleiche passiert mit der Geometrycollection, da weiß der Client einfach nicht so recht was er damit machen soll. Es gibt welche, die das können, ich finde es aber eher unpraktisch.

Dein SQL sollte so funktionieren:

Insert INTO polygons(the_geom) Select astext(t1.the_geom) from strasse t1, polygons t2 WHERE t1.id = t2.id;

Gruß Uwe

Mit diesem Insert schreibt er mir zwar alles in meine polygons tabelle, allerdings nicht zur jeweiligen ID wo ich es gerne hätte sondern einfach unten dran. Die polygons tabelle ist ja schon befüllt bis auf die spalte the_geom, wobei nur dort der eintrag stattfinden soll, wo die IDs übereinstimmen. Jetzt hat er die befüllte Geometriespalte einfach unten drangehängt. Ich bräuchte also noch ein WHERE t1.id =t2.id mehr - geht aber nicht.
Bitte nochmal um Hilfe…
Vielleicht brauch ich auch ein UPDATE? aber wie?

Hm. Dann wirst du ein Konstrukt benötigen in der Art

update <polygon> set
  the_geom = mach_mir_eine_collection(polygone.the_geom, strasse.the_geom) where strasse.id=polygon.id

Gruß Uwe

Muss ich hier wirklich eine Methode in PL/SQL schreiben? Das gitbs doch nicht, dass das nicht wenigstens verschachtelt in SQL auch geht!?
Ich habe in der Zwischanzeit ein VIEW collection angelegt in dem jetzt die KolleKtionen der geometrien stehen und die ids, zu denen sie in der haupttabelle der polgone zugeordnet gehören…
sieht ca. so aus:

view collection
id | the_geom
2 | Geometrycollection((…))
4 | Geometrycollection ((…))

Haupttabelle polygone (in geometryspalte bislang nur die Poygone)
id | att1 | att2 | …| the_geom
1 | blabla | bla | … | POLYGON ((…))
2 | bla2 | blabla| … | PLOYGON ((…))

Hab in polygone den Constraint aufgehoben, d.h. sollte geometrycollection aufnehmen können.
Ich steh leider grad auf der Leitung, aber wie bekomme ich ind ie polygontabelle die Geometrycollection vom view genau dort hin, wo die IDs übereinstimmen?? Bei den anderen IDs (z.B. 1) seht eben dann noch immer POLYGON((…))… sodass jedem POylgon sein Straßenstück zugeordnet wurde.
Danke im voraus.

Du kannst die Collection mit dem Befehl Collect() erzeugen.

z.B.

select collect(the_geom) from (select id, the_geom from <polygone> union select id, the_geom from <strassen>)
group by id

Wie du das in die Polygontabelle basteln kannst, hab ich ja schon in etwa beschreiben.
Weitere interessante Funktionen sind auch im PostGIS-Handbuch beschrieben, das auf deren Homepage kostenfrei bezogen werden kann :wink:

Grüssle Uwe