Przecięcie wielokąta za pomocą wirtualnych warstw QGIS


10

Próbuję przecinać geometrie wielokątów w QGIS przy użyciu warstwy wirtualnej:

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;

Niestety sbqry.rowid AS gidzwraca wartość NULL zamiast wartości auto-inkrementujących.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Czy ktoś wie, jak utworzyć unikalną kolumnę identyfikacyjną o nazwie „gid”? O ile wiem, wirtualne warstwy są oparte na SQLite / Spatialite.


Jakiego typu danych używasz dla warstwy wirtualnej?
DPSSpatial

Warstwy wejściowe to pliki .shp, a geometrią wyjściową jest „wielokąt”.
eclipsed_by_the_moon

Nie wiedziałem, że możesz uruchamiać funkcje przestrzenne (ST_ *) na plikach kształtów! To wspaniale!!!
DPSSpatial

próbowałeś usunąć sbqry z 'SELECT rowid as gid' ... Znalazłem inny post z takim przykładem.
kttii

„rowid AS gid” działa z prostymi instrukcjami SELECT, takimi jak tworzenie bufora, ale nie z podzapytaniem.
eclipsed_by_the_moon

Odpowiedzi:


3

W PostGIS, jeśli chcesz tylko numer wiersza, możesz to zrobić:

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;

Wydaje się, że „row_number () over ()” działa w PostGIS, ale nie w SpatiaLite (wirtualne warstwy 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

Niestety zapytanie zwraca tylko wartości NULL.
eclipsed_by_the_moon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.