Intersezione poligonale usando i livelli virtuali QGIS


10

Sto cercando di intersecare le geometrie poligonali in QGIS usando un livello virtuale:

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;

Sfortunatamente, sbqry.rowid AS gidrestituisce NULL anziché i valori di auto-incremento.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Qualcuno sa come creare una colonna identificatore univoco chiamato 'gid'? Per quanto ne so, i livelli virtuali sono basati su SQLite / Spatialite.


Che tipo di dati stai usando per il livello virtuale?
DPSSpatial

I livelli di input sono file .shp, il tipo di geometria di output è 'poligono'.
eclipsed_by_the_moon

Non sapevo che avresti potuto eseguire funzioni spaziali (ST_ *) su shapefile! È fantastico!!!
DPSSpatial

hai provato a rimuovere sbqry da 'SELECT rowid as gid' ... Ho trovato un altro post con un esempio del genere.
kttii,

'rowid AS gid' funziona con semplici istruzioni SELECT come la creazione di un buffer ma non con una subquery.
eclipsed_by_the_moon il

Risposte:


3

In PostGIS, se vuoi solo il numero di riga puoi farlo:

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 ()' sembra funzionare in PostGIS ma non in SpatiaLite (livelli virtuali 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

Sfortunatamente, la query restituisce solo valori NULL.
eclipsed_by_the_moon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.