[FOSSGIS-Talk] ST_Difference ohne Eingabegeometrien

R. Reiterer r.reiterer at posteo.at
Mi Sep 14 22:09:21 CEST 2016


Hallo Bernhard,

vielen Dank für deine Antwort. ST_Dump nutze ich um Multipolygone in 
Einzelpolygone zu zerlegen, etwa wenn eine Gewässergeometrie eine 
Grünlandgeometrie in mehrere Teile zerteilt. Ohne GROUP BY erhalte ich 
eine Fehlermeldung:

column "gruenland.geom" must appear in the GROUP BY clause or be used in 
an aggregate function
LINE 7:   (ST_Dump(ST_Difference(gruenland.geom, 
ST_Union(gewaeser.geom...

Zu COALESCE habe ich mir leider keine Notizen beim Erstellen der Abfrage 
gemacht :/ Ich bin davon ausgegangen, dass COALESCE nötig ist, um die 
Grünlandgeometrien zu erhalten, wenn keine räumliche Überschneidung mit 
bestehenden Gewässergeometrien vorliegt. Anscheinend ist dies aber - wie 
soeben getestet - nicht der Fall. Näheres möchte ich mir in den nächsten 
Tagen ansehen.

Schöne Grüße,

Reinhard

Am 14.09.2016 07:52 schrieb Bernhard Ströbl:
> Hallo Reinhard,
> 
> ich bin jetzt nicht sicher aber ich vermute, dass COALESCE da nicht
> richtig ist. Hast Du es schon mal mit ST_IsEmpty() probiert
> Ich würde mich der Sache folgendermassen annähren:
> Erst mal sehen (ich mache das immer mit ST_AsText()), was
> ST_Difference in den Fällen, in denen gewaesser.geom keine Geometrie
> hat, zurück gibt. Ist der Rückgabewert wirklich NULL oder eine leere
> Geometrie?
> 
> Nochwas: ST_Dump habe ich noch nie benutzt aber die Dokumentation sagt
> "ST_Dump is useful for expanding geometries. It is the reverse of a
> GROUP BY in that it creates new rows." Deshalb wundere ich mich, dass
> Deine GROUP BY-Klausel hinter der Klammer steht, in der ST_Dump steht.
> Ich würde es auf der selben Klammerebene erwarten wie das ST_Union,
> also eher sowas:
> ST_Dump(
>   COALESCE(
>     ST_Difference(gruenland.geom, ST_Union(gewaesser.geom)
>     ),
>   gruenland.geom
>   )
>   FROM public.gruenland, public.gewaesser
>   GROUP BY gruenland.gid
> ).geom::geometry(Polygon, 31256) AS geom
> 
> viel Erfolg
> 
> Bernhard
> 
> Am 13.09.2016 um 20:10 schrieb R. Reiterer:
>> Geehrte PostGIS Enthusiasten,
>> 
>> ich nutze in QGIS nachfolgende SQL Abfrage um aus dem Layer 
>> "gruenland"
>> (Polygone) den Layer 'gewaesser' (ebenfalls Polygone) gewissermaßen
>> auszustechen.
>> 
>> CREATE VIEW public.gruenland_differenz AS
>> SELECT
>>    row_number() over() AS gid,
>>    unterabfrage.geom
>> FROM
>> (SELECT
>>    (ST_Dump(COALESCE(ST_Difference(gruenland.geom,
>> ST_Union(gewaesser.geom)), gruenland.geom))).geom::geometry(Polygon,
>> 31256) AS geom
>>    FROM public.gruenland, public.gewaesser
>>    GROUP BY gruenland.gid
>> ) AS unterabfrage;
>> 
>> Einige Datensätze beinhalten für den Layer 'gewaesser' jedoch keine
>> Geometrien. Die Abfrage gibt in solchen Fällen kein Ergebnis zurück,
>> gewünscht sind jedoch die unbearbeiteten 'gruenland' Polygone. Kann 
>> mir
>> diesbezüglich jemand bei der Adaptierung der Abfrage helfen?
>> 
>> Vielen Dank und schöne Grüße,
>> 
>> Reinhard
>> 
>> --
>> ....................................................................
>> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
>> GIS-Bereich und Freier Geodaten!
>> http://www.fossgis.de/             https://twitter.com/fossgis_eV
>> 
>> ____________________________________________________________________
>> FOSSGIS-Talk-Liste mailing list
>> FOSSGIS-Talk-Liste at fossgis.de
>> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
>> 
>> 
>> __________ Information from ESET Mail Security, version of virus
>> signature database 14115 (20160913) __________
>> 
>> The message was checked by ESET Mail Security.
>> http://www.eset.com
>> 
>> 
> 
> 
> __________ Information from ESET Mail Security, version of virus
> signature database 14118 (20160914) __________
> 
> The message was checked by ESET Mail Security.
> http://www.eset.com
> 
> 
> --
> ....................................................................
> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
> GIS-Bereich und Freier Geodaten!
> http://www.fossgis.de/             https://twitter.com/fossgis_eV
> 
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste