Polygonschnitt mit virtuellen QGIS-Ebenen


10

Ich versuche, Polygongeometrien in QGIS mithilfe einer virtuellen Ebene zu schneiden:

SELECT
    sbqry.rowid AS gid,
    sbqry.geom
FROM
    (SELECT
        ST_Intersection(land_parcels.geometry, flood_zone.geometry) AS geom
    FROM land_parcels, flood_zone
    WHERE ST_Intersects(land_parcels.geometry, flood_zone.geometry) AND NOT ST_Touches(land_parcels.geometry, flood_zone.geometry))
    AS sbqry;

Gibt leider sbqry.rowid AS gidNULL zurück, anstatt die Werte automatisch zu erhöhen.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Weiß jemand, wie man eine eindeutige Bezeichnerspalte mit dem Namen 'gid' erstellt? Soweit ich weiß, basieren virtuelle Ebenen auf SQLite / Spatialite.


Welchen Datentyp verwenden Sie für die virtuelle Schicht?
DPSSpatial

Die Eingabeebenen sind .shp-Dateien, der Ausgabegeometrietyp ist 'Polygon'.
Eclipsed_by_the_moon

Ich wusste nicht, dass Sie räumliche Funktionen (ST_ *) auf Shapefiles ausführen können! Das ist großartig!!!
DPSSpatial

Haben Sie versucht, sbqry aus 'SELECT rowid as gid' zu entfernen? Ich habe einen anderen Beitrag mit einem solchen Beispiel gefunden.
Kttii

'rowid AS gid' funktioniert mit einfachen SELECT-Anweisungen wie dem Erstellen eines Puffers, jedoch nicht mit einer Unterabfrage.
Eclipsed_by_the_moon

Antworten:


3

Wenn Sie in PostGIS nur die Zeilennummer möchten, können Sie dies tun:

SELECT
    row_number() over () as gid,
    sbqry.geom
FROM
    (SELECT
        ST_Intersection(land_parcels.geometry, flood_zone.geometry) AS geom
    FROM land_parcels, flood_zone
    WHERE ST_Intersects(land_parcels.geometry, flood_zone.geometry) AND NOT ST_Touches(land_parcels.geometry, flood_zone.geometry))
    AS sbqry;

'row_number () over ()' scheint in PostGIS zu funktionieren, nicht jedoch in SpatiaLite (virtuelle QGIS-Ebenen).
Eclipsed_by_the_moon

2
SELECT  f.rowid AS gid, f.geom
FROM
(SELECT sbqry.geom
FROM (SELECT ST_Intersection(land_parcels.geometry, flood_zone.geometry) AS geom FROM land_parcels, flood_zone 
WHERE ST_Intersects(land_parcels.geometry, flood_zone.geometry) AND NOT ST_Touches(land_parcels.geometry, flood_zone.geometry)) AS sbqry) as f

Leider gibt die Abfrage nur NULL-Werte zurück.
eclipsed_by_the_moon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.