ละลายรูปหลายเหลี่ยมใน QGIS (GEOS) ด้วยความอดทน


11

ฉันมีเลเยอร์เวกเตอร์รูปหลายเหลี่ยมแสดงพื้นที่ที่ถูกน้ำท่วม เลเยอร์ได้รับการผลิตในลักษณะที่บางพื้นที่ประกอบไปด้วยรูปหลายเหลี่ยมขนาดเล็กจำนวนมาก (ดูภาพด้านล่างโดยมีข้อความว่า "ข้อมูลดั้งเดิม")

ฉันต้องการที่จะยุบรูปหลายเหลี่ยมที่พวกเขาสัมผัส ถ้าฉันใช้เครื่องมือการประมวลผลทางภูมิศาสตร์ละลายใน fTools ของ QGIS ซึ่งใช้ไลบรารี GEOS ฉันจะได้รับผลลัพธ์ที่ไม่คาดคิด (ดู "ละลายด้วย QGIS fTools") ดูเหมือนว่า GEOS จะไม่ใช้เกณฑ์ในการพิจารณาว่ารูปหลายเหลี่ยมสัมผัสหรือไม่ดังที่กล่าวไว้ในปัญหาเหล่านี้:

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

วิธีการเดียวกันใน ArcGIS ให้ผลลัพธ์ที่คาดหวัง (ดู "ละลายด้วย ArcGIS 10.1")

เห็นได้ชัดว่านี่เป็น "คุณสมบัติ" ของ GEOS แทนที่จะเป็นข้อบกพร่อง มีวิธีแก้ไขข้อมูลที่ฉันต้องสร้างผลลัพธ์ที่คาดหวังหรือไม่? การสูญเสียความแม่นยำเล็กน้อย (ไม่กี่ซม.) สามารถยอมรับได้สำหรับฉัน ในทางที่ดีทางออกจะเป็นสิ่งที่ฉันสามารถเขียนลงในปลั๊กอิน QGIS เป็นขั้นตอนการประมวลผลล่วงหน้า

คำถามที่เกี่ยวข้อง (ไม่มีคำตอบ): วิธีการตั้งค่าความอดทนของเครื่องมือการประมวลผลทางภูมิศาสตร์ใน QGIS?

เชื่อมโยงไปยังข้อมูลตัวอย่างเป็น shapefile: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip

ละลายรูปหลายเหลี่ยม v.dissolve


วิธีแก้ปัญหาคือการเติบโตก่อนแล้วจึงลดขนาดของรูปหลายเหลี่ยมที่ละลายใน fTools (โดยการบัฟเฟอร์ก่อนด้วยค่าบวกและลบบัฟเฟอร์)
Jake

ฉันลองแล้ว แต่จบลงด้วยปัญหาอื่น ๆ (เช่นi.stack.imgur.com/LnFJy.png ) ที่นี่พื้นที่สีน้ำเงินถูกสร้างขึ้นเมื่อฉันบัฟเฟอร์ / ละลาย / neg-buffer ซึ่งไม่ควรเป็น นี่ไม่ได้ดีไปกว่าปัญหาดั้งเดิมมากเกินไป ฉันไม่สามารถเห็นวิธีการกู้คืนมุม "คม" ดั้งเดิม
Snorfalorpagus

คำตอบ:


14

ในกรณีนี้ดูเหมือนว่าคุณจะต้องช่วยให้เครื่องมือละลายโดยแก้ไขโทโปโลยีก่อน นี่คือวิธีที่คุณสามารถทำได้ใน GRASS

เมื่อคุณโหลด shapefile นี่คือสิ่งที่ GRASS เห็น:

กากบาทแต่ละอันทำเครื่องหมายพื้นที่ คุณจะเห็นว่ามีกากบาทบางเส้นบนเส้นแบ่งเขต: นี่คือรูปหลายเหลี่ยมเศษไม้ที่เกิดจากการชดเชยเล็กน้อยระหว่างเส้นแบ่งเขต

  1. ลบรูปหลายเหลี่ยมเศษไม้ที่เกิดจากช่องว่างระหว่างรูปหลายเหลี่ยมจริง:

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. ถ่ายเส้นแบ่งเขต:

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. ทำลายเส้นเขตแดนที่ทางแยกใหม่:

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. ลบเส้นขอบที่ซ้ำกันในขณะนี้:

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. ละลายรูปหลายเหลี่ยม

    v.dissolve input=tempB output=cleaned --o column=ID

และอื่น ๆ :


ขอบคุณ @ เจค นี่เป็นคำตอบที่ชัดเจนมาก น่าเสียดายที่เมื่อฉันพยายามใช้กระบวนการกับชุดข้อมูลทั้งหมดของฉัน (ครอบคลุม 2500km2) ฉันได้รับข้อผิดพลาดจากเครื่องมือ snap "ข้อผิดพลาด: G_realloc: ไม่สามารถจัดสรรหน่วยความจำ 144720024 ไบต์ที่ snap.c: 186" ฉันเดาว่าฉันจะต้องแบ่งมันออกเป็นชิ้นเล็ก ๆ ควรจะเป็นเช่นนั้นเนื่องจากฉันแบ่งมันออกเป็น 0.25km2 กำลังสองเพื่อเร่งการแยก / การจัดทำดัชนีเชิงพื้นที่ (นี่คือฟิลด์ "ID" ในข้อมูลตัวอย่าง)
Snorfalorpagus

7

ใช้คำสั่ง GRASS GIS v.dissolve (ใน Sextante plugin -> คำสั่ง GRASS -> Vector)

ถ้าฉันทำซ้ำตัวอย่างคุณอย่างรวดเร็ว: ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์ด้วย v.dissolve:

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย

ปัญหานี้เข้าใจง่าย Shapefile ไม่มีโทโพโลยีถ้าสองพื้นที่ใช้ร่วมกันของขอบทั่วไปที่ขอบนั้นจะถูกแปลงเป็นดิจิทัลสองครั้งและเก็บไว้ในที่ซ้ำกัน

คุณเห็นสิ่งนี้ชัดเจนเมื่อคุณพยายามแก้ไขรูปร่างไฟล์:

ป้อนคำอธิบายรูปภาพที่นี่

GRASS GIS (as ArcGIS) เป็นทอพอโลยี gis เมื่อคุณนำเข้า shapefile ใน GRASS เลเยอร์ที่ได้จะมีทอพอโลยี: เส้นขอบทั่วไประหว่างสองพื้นที่นั้นมีอยู่หนึ่งครั้งและถูกแชร์

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยเหตุนี้เมื่อคุณต้องการที่จะละลายเชปไฟล์ ( ละลายสองขอบเขต ) คุณอาจพบปัญหา (ใน QGIS, GvSIG, OpenJUMP หรือ 3.x ArcView เก่า) ดูArcUserI: การทำความเข้าใจโทโพโลยีและ shapefiles

ใน GRASS v.dissolve ถูกออกแบบมาเพื่อละลายขอบเขตทั่วไประหว่างพื้นที่ที่มีหมายเลขหมวดหมู่เดียวกัน


1
ฉันเดาว่านี่เป็นปัญหาที่เป็นตัวเลขและฉันสงสัยว่าสำเนาที่ดีงามของรูปทรงเรขาคณิตของ OP จะจับคุณสมบัติตัวเลขที่เหมือนกันหรือไม่
Chau

@Chau: v.dissolveมีพารามิเตอร์ความอดทนซึ่งแก้ไขปัญหาของ OP
Jake

รายละเอียดที่ควรจะรวมอยู่ในคำตอบข้างต้นขอบคุณสำหรับคำชี้แจง :)
Chau

ฉันได้เพิ่มลิงก์ไปยังข้อมูลดั้งเดิมเป็น shapefile ในคำถาม เมื่อฉันใช้v.dissolveมันดูเหมือนว่าจะทำงานยกเว้นว่ามัน "เติม" สี่เหลี่ยมเล็ก ๆ ในช่วงกลางของคุณสมบัติ i.stack.imgur.com/AA59l.png
Snorfalorpagus

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