การแยกหลายเหลี่ยมโดยใช้เลเยอร์เสมือน 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.