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.