Hallo,
Ich möchte jene Polygone von “table” zusammenfügen, die einen bestimmten gridcode haben (5052 und 3001) und aneinander grenzen. Das Ergebnis würde ich gerne in QGis ansehen,aber mir fehlt in dem Fall eine Spalte als eindeutiger Schlüssel. Wie lege ich so eine an, die einfach automatisch 1,2,3,… reinschreibt? intern arbeitet postgre ja mit solchen oid. kann ich die sichtbar machen?
Danke schon mal im Voraus!
Mein code für View merge:
CREATE OR REPLACE VIEW merge AS
SELECT a.gridcode,
(a.area + b.area) AS ges_area,
a.area AS area_a,
b.area AS area_b,
st_union(a.the_geom, b.the_geom) AS geom_merge
FROM table a, table b
WHERE a.gridcode = 5052 AND b.gridcode = 3001 AND st_touches(a.the_geom, b.the_geom);
Leider ergibt sich in diesem Zusammenhang noch ein Problem.
Will man das/die/den View in QGIS anzeigen lassen jammert das Prgramm keine eindeutige Spalte zu finden und ladet somit nichts. QGIS will eine spalte vom typ int4 und nicht bigint, wie von nextval(‘foo_seq’) zurückgegeben wird. Hab schon gesucht wie ich von dem bigint zum int komm, aber ohne erfolg…
bitte nochmals um hilfe
Das ist ein bekanntes Problem bei der Arbeit mit Geodaten. Die bösen Clients wollen immer eine eindeutige ID in Form eines Keys für ihre Geometrien, sonst machen die nix oder nur wenig, die Schlingel (ArcGIS, UMN, UDig etc.) Das macht oft Probleme wenn Daten nicht nur selektiert werden, sondern eben aggregiert werden und quasi ‘neue’ Elemente entstehen. Das hat nur begrenzt was mit der DB zu tun sondern eher mit dem generellen Handling der Daten im GIS-Client.
Du könntest eventuell das Ergebnis des nextval in ein int4 casten, aber ich bin mir nicht sicher, ob das die Lösung deines Problems sein wird.
Vor allem aber werden solche Layer aus Views auch oft extrem langsam im Aufbau im Client, vor allen wenn eben geometrische Aggregate wie st_union etc beteiligt sind. Eine weitere Abhilfe wären hier z.B. das Postgres-Äquivalent zu Materialized Views, vielleicht hilft ja dieser Link weiter.
das mit dem casten funktioniert zwar gut (wusste nicht, dass ich es direkt in der viewerzeugung anwenden kann), aber das dummer QGIS ist natürlich trotz typ INT jetzt noch nicht zufrieden. Die eindeutige Spalte soll von Datensätzen der verwendeteten Tabellen fürs View kommen, was ja in meinem Fall nicht funktioniert. Die uber nexval(sequenz) generierte Spalte wird nicht akzeptiert… grrrr
somit wird mit ja nur noch das mit den materialized views überblieben… danke für den link.