Re: [FOSSGIS-Talk] ST_Difference ohne Eingabegeometrien
Hallo Bernhard, ja, das ist mir weitgehend bewusst. Ich melde mich wieder, sobald die Abfrage funktioniert wie sie soll. Schöne Grüße, Reinhard Am 15.09.2016 08:07 schrieb Bernhard Ströbl: Hallo Reinhard, ich meinte nicht, dass Du GROUP BY weglassen solltest, sondern, warum es nicht in der Klammer steht. COALESCE gibt den ersten NOT NULL-Wert in einer Reihe von Werten zurück, deshalb meine Frage, ob es sich um eine NULL oder eine leere Geometrie handelt. Grüße Bernhard Am 14.09.2016 um 22:09 schrieb R. Reiterer: 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@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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste -- 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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste __ Information from ESET
Re: [FOSSGIS-Talk] ST_Difference ohne Eingabegeometrien
Hallo Reinhard, ich meinte nicht, dass Du GROUP BY weglassen solltest, sondern, warum es nicht in der Klammer steht. COALESCE gibt den ersten NOT NULL-Wert in einer Reihe von Werten zurück, deshalb meine Frage, ob es sich um eine NULL oder eine leere Geometrie handelt. Grüße Bernhard Am 14.09.2016 um 22:09 schrieb R. Reiterer: 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@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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste -- 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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste __ Information from ESET Mail Security, version of virus signature database 14122 (20160914) __ The message was checked by ESET Mail Security. http://www.eset.com __ Information from ESET Mail Security, version
Re: [FOSSGIS-Talk] ST_Difference ohne Eingabegeometrien
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@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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste -- 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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
Re: [FOSSGIS-Talk] ST_Difference ohne Eingabegeometrien
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@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@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste