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.


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;

'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

Sayangnya, kueri hanya mengembalikan nilai NULL.
eclipsed_by_the_moon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.