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.


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;

'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

Infelizmente, a consulta retorna apenas valores NULL.
— eclipsed_by_the_moon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.