Persimpangan poligon menggunakan lapisan virtual QGIS

10

Saya mencoba memotong geometri poligon di QGIS dengan menggunakan lapisan virtual:

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;

Sayangnya, sbqry.rowid AS gidmengembalikan NULL alih-alih nilai tambah otomatis.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Adakah yang tahu cara membuat kolom pengenal unik bernama 'gid'? Sejauh yang saya tahu lapisan virtual didasarkan pada SQLite / Spatialite.

eclipsed_by_the_moon
sumber
Jenis data apa yang Anda gunakan untuk lapisan virtual?
DPSSpatial
Lapisan input adalah file .shp, tipe geometri keluaran adalah 'poligon'.
eclipsed_by_the_moon
Saya tidak tahu Anda bisa menjalankan fungsi spasial (ST_ *) pada shapefile! Itu hebat!!!
DPSSpatial
Anda sudah mencoba menghapus sbqry dari 'SELECT rowid as gid' ... Saya menemukan posting lain dengan contoh seperti itu.
kttii
'rowid AS gid' bekerja dengan pernyataan SELECT sederhana seperti membuat buffer tetapi tidak dengan subquery.
eclipsed_by_the_moon

Jawaban:

3

Di PostGIS, jika Anda hanya menginginkan nomor baris, Anda dapat melakukan ini:

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
sumber
'row_number () over ()' tampaknya berfungsi di PostGIS tetapi tidak di SpatiaLite (lapisan virtual QGIS).
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
sumber
Sayangnya, kueri hanya mengembalikan nilai NULL.
eclipsed_by_the_moon