Interseção de polígono usando camadas virtuais QGIS

10

Estou tentando interceptar geometrias de polígonos no QGIS usando uma camada 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;

Infelizmente, sbqry.rowid AS gidretorna NULL em vez de valores de incremento automático.

insira a descrição da imagem aqui insira a descrição da imagem aqui

Alguém sabe como criar uma coluna identificadora única chamada 'gid'? Tanto quanto eu sei, as camadas virtuais são baseadas em SQLite / Spatialite.

eclipsed_by_the_moon
fonte
Que tipo de dados você está usando para a camada virtual?
DPSSpatial
As camadas de entrada são arquivos .shp, o tipo de geometria de saída é 'polígono'.
eclipsed_by_the_moon
Eu não sabia que você poderia executar funções espaciais (ST_ *) em shapefiles! Isso é ótimo!!!
DPSSpatial
você tentou remover sbqry de 'SELECT rowid as gid' ... Encontrei outro post com esse exemplo.
kttii
'rowid AS gid' funciona com instruções SELECT simples, como criar um buffer, mas não com uma subconsulta.
eclipsed_by_the_moon

Respostas:

3

No PostGIS, se você deseja apenas o número da linha, pode fazer o seguinte:

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
fonte
'row_number () over ()' parece funcionar no PostGIS, mas não no SpatiaLite (camadas virtuais do 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
fonte
Infelizmente, a consulta retorna apenas valores NULL.
eclipsed_by_the_moon