Перетин багатокутника за допомогою віртуальних шарів QGIS


10

Я намагаюся перетинати геометрії полігонів у QGIS за допомогою віртуального шару:

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;

На жаль, sbqry.rowid AS gidповертає NULL замість значень автоматичного збільшення.

введіть тут опис зображення введіть тут опис зображення

Хтось знає, як створити унікальний стовпчик ідентифікатора під назвою "gid"? Наскільки я знаю, віртуальні шари базуються на SQLite / Spatialite.


Який тип даних ви використовуєте для віртуального шару?
DPSSpatial

Вхідні шари - файли .shp, тип вихідної геометрії - «багатокутник».
eclipsed_by_the_moon

Я не знав, що ти можеш запускати просторові функції (ST_ *) на форм-файлах! Це чудово!!!
DPSSpatial

ви спробували видалити sbqry з "SELECT rowid as gid" ... Я знайшов ще один допис із таким прикладом.
kttii

'rowid AS gid' працює з простими операторами SELECT, такими як створення буфера, але не з підзапитом.
eclipsed_by_the_moon

Відповіді:


3

У PostGIS, якщо ви просто хочете номер рядка, ви можете зробити це:

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 ()", здається, працює в PostGIS, але не в SpatiaLite (віртуальних шарах 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

На жаль, запит повертає лише значення NULL.
eclipsed_by_the_moon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.