Пересечение полигонов с использованием виртуальных слоев 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.