Intersección de polígonos usando capas virtuales QGIS


10

Estoy tratando de intersectar geometrías de polígonos en QGIS usando una capa 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;

Desafortunadamente, sbqry.rowid AS giddevuelve NULL en lugar de valores de incremento automático.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

¿Alguien sabe cómo crear una columna de identificador único llamada 'gid'? Hasta donde yo sé, las capas virtuales se basan en SQLite / Spatialite.


¿Qué tipo de datos está utilizando para la capa virtual?
DPSEspacial

Las capas de entrada son archivos .shp, el tipo de geometría de salida es 'polígono'.
eclipsed_by_the_moon

¡No sabía que podía ejecutar funciones espaciales (ST_ *) en archivos shape! ¡¡¡Eso es genial!!!
DPSEspacial

¿Has intentado eliminar sbqry de 'SELECT rowid as gid'? Encontré otra publicación con ese ejemplo.
kttii

'rowid AS gid' funciona con instrucciones SELECT simples como crear un búfer pero no con una subconsulta.
eclipsed_by_the_moon

Respuestas:


3

En PostGIS, si solo desea el número de fila, puede hacer esto:

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 en PostGIS pero no en SpatiaLite (capas virtuales 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

Desafortunadamente, la consulta solo devuelve valores NULL.
eclipsed_by_the_moon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.