Intersection de polygones à l'aide de couches virtuelles QGIS


10

J'essaie d'intersecter des géométries de polygones dans QGIS en utilisant une couche virtuelle:

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;

Malheureusement, sbqry.rowid AS gidretourne NULL au lieu de valeurs auto-incrémentées.

entrez la description de l'image ici entrez la description de l'image ici

Quelqu'un sait-il comment créer une colonne d'identifiant unique nommée 'gid'? Autant que je sache, les couches virtuelles sont basées sur SQLite / Spatialite.


Quel type de données utilisez-vous pour la couche virtuelle?
— DPSSpatial

Les couches en entrée sont des fichiers .shp, le type de géométrie en sortie est «polygone».
— eclipsed_by_the_moon

Je ne savais pas que vous pouviez exécuter des fonctions spatiales (ST_ *) sur des fichiers de formes! C'est génial!!!
— DPSSpatial

avez-vous essayé de supprimer sbqry de 'SELECT rowid as gid' ... J'ai trouvé un autre post avec un tel exemple.
— kttii

'rowid AS gid' fonctionne avec des instructions SELECT simples comme la création d'un tampon mais pas avec une sous-requête.
— eclipsed_by_the_moon

Réponses:


3

Dans PostGIS, si vous voulez simplement le numéro de ligne, vous pouvez le faire:

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 ()' semble fonctionner dans PostGIS mais pas dans SpatiaLite (couches virtuelles 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

Malheureusement, la requête renvoie uniquement des valeurs NULL.
— eclipsed_by_the_moon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.