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.