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.

verdunkelt durch den Mond
quelle
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;
kttii
quelle
'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
Alexandre Neto
quelle
Leider gibt die Abfrage nur NULL-Werte zurück.
eclipsed_by_the_moon