neue geometrie zu geometrycollection spalte

Probleme, Fragen die mit der Installation und Anwendung der PostGIS-Erweiterung zu tun haben.

neue geometrie zu geometrycollection spalte

Beitragvon jasmin » Di 14. Jul 2009, 11:25

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
jasmin
Neuer Benutzer
 
Beiträge: 22
Registriert: Mi 20. Mai 2009, 15:02

Beitragvon Gisman » Di 14. Jul 2009, 15:25

jasmin hat geschrieben: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:

Code: Alles auswählen
Insert INTO polygons(the_geom) Select astext(t1.the_geom) from strasse t1, polygons t2 WHERE t1.id = t2.id;


Gruß Uwe
Have a lot of fun!
Gisman
Erfahrener Benutzer
 
Beiträge: 863
Registriert: Fr 20. Jan 2006, 16:30
Wohnort: Pfalz

Beitragvon jasmin » Mi 15. Jul 2009, 08:13

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?
jasmin
Neuer Benutzer
 
Beiträge: 22
Registriert: Mi 20. Mai 2009, 15:02

Beitragvon Gisman » Mi 15. Jul 2009, 09:04

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

Code: Alles auswählen
update <polygon> set
  the_geom = mach_mir_eine_collection(polygone.the_geom, strasse.the_geom) where strasse.id=polygon.id
Gruß Uwe
Have a lot of fun!
Gisman
Erfahrener Benutzer
 
Beiträge: 863
Registriert: Fr 20. Jan 2006, 16:30
Wohnort: Pfalz

Beitragvon jasmin » Mi 15. Jul 2009, 09:59

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.
jasmin
Neuer Benutzer
 
Beiträge: 22
Registriert: Mi 20. Mai 2009, 15:02

Beitragvon Gisman » Mi 15. Jul 2009, 12:51

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

z.B.
Code: Alles auswählen
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 ;)

Grüssle Uwe
Have a lot of fun!
Gisman
Erfahrener Benutzer
 
Beiträge: 863
Registriert: Fr 20. Jan 2006, 16:30
Wohnort: Pfalz


Zurück zu PostGIS

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste