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 2016年

シェープファイルで空間関数(ST_ *)を実行できることを知りませんでした!それは素晴らしいことです!!!
DPSSpatial

'select rowid as gid'からsbqryを削除してみましたか?そのような例の別の投稿を見つけました。
kttii

'rowid AS gid'は、バッファーの作成などの単純なSELECTステートメントでは機能しますが、サブクエリでは機能しません。
eclipsed_by_the_moon 2016年

回答:


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 2016年

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 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.