แปลงแรสเตอร์ให้เป็นรูปหลายเหลี่ยมได้อย่างราบรื่นใน QGIS


14

ฉันประสบความสำเร็จอย่าง จำกัด ในการสร้างรูปหลายเหลี่ยมเส้นเรียบจากชั้นแรสเตอร์

ฉันได้สร้างเส้นชั้นความสูงและเส้นเขตแดนและใช้ QGIS Union จากนั้นฉันก็ใช้ QGIS Polygonize จากนั้นใช้สถิติเชิงพื้นที่กับแรสเตอร์ดั้งเดิมเพื่อรับค่ารูปหลายเหลี่ยม

วิธีที่สองที่ฉันพยายามคือการแปลงแรสเตอร์เป็นรูปหลายเหลี่ยม จากนั้นสร้างคอลัมน์คุณลักษณะใหม่ที่โค้งมนไปยังรูปร่างที่ฉันต้องการ จากนั้นฉันก็ยุบบรรทัดระหว่างค่าเดียวกัน จากนั้นใช้ v.generalize วิธีนี้เร็วกว่าเล็กน้อย แต่จะทำให้รูปหลายเหลี่ยมมีรอยหยัก / ไม่สลบ

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

มีวิธีที่ง่ายกว่านี้หรือเปล่าที่ใช้งานได้จริงตลอดเวลา ดูเหมือนว่าควรมีคำสั่งง่าย ๆ ที่ทำกระบวนการทั้งหมด


2
เหตุใดคุณจึงใช้รูปหลายเหลี่ยม อินพุตแรสเตอร์ของคุณต่อเนื่อง (เช่น DEM เป็นทศนิยม) QGIS มีเครื่องมือ contour ซึ่งเป็นทางลัดไปยัง GDAL_Contour .. qgistutorials.com/th/docs/working_with_terrain.htmlคุณกำลังพยายามหาเส้นขอบหรือไฮโปเมตริกหรือไม่?
Michael Stimson

ไฟล์อินพุตคือ tif และไฟล์เอาต์พุตที่ต้องการเป็นไฟล์รูปร่างที่มีรูปหลายเหลี่ยมเท่านั้นที่เพิ่มขึ้นเฉพาะ ฉันพบเครื่องมือมากมายสำหรับสร้าง polylines แต่ไม่ใช่รูปหลายเหลี่ยม
Rx_

ยุติธรรมเพียงพอคุณกำลังพยายามหาพื้นที่ไฮเพอโรเมตริก ฉันใช้ Esri (ส่วนใหญ่) ซึ่งมีตัวเลือกในการลดความซับซ้อนของรูปหลายเหลี่ยมที่สร้างโดยแรสเตอร์เป็นรูปหลายเหลี่ยม แต่นั่นไม่ได้ช่วยที่นี่ มันจะเป็นยังไงถ้าคุณจะสร้าง contours จาก DEM ให้เพิ่มกล่อง bounding แล้วทำการ polygonize? จากนั้นคุณสามารถสร้างจุดป้ายกำกับตัด / ตัวอย่างค่าและติดป้ายรูปหลายเหลี่ยมด้วยแอตทริบิวต์ ... อาจเป็นไปได้ว่าคุณอาจได้รับรูปหลายเหลี่ยมค่าเดียวกันซึ่งสามารถละลายได้ แต่ปัญหาที่ใหญ่กว่าคือการกระโดดข้ามช่วงเวลา ฉันมีรหัสแอตทริบิวต์ hypso จากรูปทรง แต่การทำงานเกี่ยวกับความคุ้มครอง ArcInfo
ไมเคิลสติมสัน

สิ่งที่คุณอธิบายคือสิ่งที่ฉันคิดว่าฉันกำลังทำในวิธีแรกของฉัน มันยุ่งยาก จำเป็นต้องตรวจสอบให้แน่ใจว่าแต่ละไฟล์มีแอตทริบิวต์ id แล้วลบรูปหลายเหลี่ยมที่ไม่ได้มีพื้นที่ด้านบนเป็นศูนย์เมื่อมีรูปหลายเหลี่ยม ฉันไม่สามารถรับฉลากที่ถูกต้องสอดคล้องกันของเส้นเพื่อถ่ายโอนไปยังรูปหลายเหลี่ยม วิธีที่สองใกล้เคียงกับสิ่งที่ฉันต้องการ แต่ v.generalize ดูเหมือนจะไม่ได้ผล 100% ของเวลา ฉันหวังว่า ESRI จะลดความซับซ้อนของรูปหลายเหลี่ยมเป็นตัวเลือกใน QGIS ตามที่คุณต้องการ
Rx_

คำตอบ:


12

ฉันประสบปัญหาเดียวกันกับที่คุณมีในวิธีที่สองของคุณ ฉันส่งออกแรสเตอร์ไปยังเวกเตอร์และลองใช้ v.generalise และฉันได้รูปหลายเหลี่ยมที่เรียบเนียนเป็นส่วนใหญ่ด้วยขอบเขต 'ก้าว' เป็นครั้งคราวซึ่งดูเหมือนจะไม่ได้รับผลกระทบจากอัลกอริทึม

ฉันพบกระบวนการที่เหมาะกับงานของฉันไม่แน่ใจว่าเป็นวิธีที่ดีที่สุด แต่คิดว่าฉันจะแบ่งปันในกรณีที่มันช่วยคุณได้

สิ่งที่ฉันเริ่มต้นด้วยคือตาราง ASCII จากBoMที่มีลักษณะเช่นนี้: ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ฉันต้องการสิ่งที่คล้ายกับสิ่งที่ BoM ผลิตเช่นนี้: ป้อนคำอธิบายรูปภาพที่นี่

ฉันสามารถรับผลลัพธ์ (ที่ฉันพอใจ) โดยใช้ขั้นตอนต่อไปนี้

  • โหลดกริด (ในกรณีของฉัน ASCII Grid จาก BoM) ลงใน QGIS
  • ถอดรหัสเป็นคลาสที่ไม่ต่อเนื่อง (กล่องประมวลผลการประมวลผล> หญ้า> Raster> r.recode)
  • เรียกใช้ตัวกรองส่วนใหญ่เพื่อ 'ล้างข้อมูล' (กำลังประมวลผลกล่องเครื่องมือ> SAGA> ตัวกรองแรสเตอร์> ตัวกรองส่วนใหญ่)
  • สร้างรูปทรงจากกริดที่กรองในช่วงเวลา 1 และเก็บไว้ในแอตทริบิวต์ 'คลาส' (เนื่องจากคลาสของฉันมี 1,2,3,4 และอื่น ๆ ) (Raster 'เมนู'> การแยก> รูปทรง)
  • รูปทรงผลลัพธ์ค่อนข้างทั่วไป แต่ฉันใช้ v.generalised ด้วยอัลกอริทึม 'งู' เพื่อทำให้เรียบ (การประมวลผลกล่องเครื่องมือ> หญ้า> เวกเตอร์> v.generalize)
  • จากนั้นฉันแปลงบรรทัดเป็นรูปหลายเหลี่ยม (กำลังประมวลผลกล่องเครื่องมือ> อัลกอริทึม QGIS> เครื่องมือเรขาคณิตเวกเตอร์> เส้นเป็นรูปหลายเหลี่ยม)
  • ในที่สุดฉันต้องแปลงรูปหลายเหลี่ยมส่วนเดียวเป็นหลายส่วนเพื่อให้รูปหลายเหลี่ยมทั้งหมดดึงเข้ามาอย่างสวยงาม (กล่องเครื่องมือประมวลผล> อัลกอริทึม QGIS> เครื่องมือเรขาคณิตเวกเตอร์> ส่วนเดียวไปยัง Mulitpart)

หลังจากจัดแต่งทรงผมของฉันอยู่ด้านล่าง: ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะสนใจฟังด้วยเช่นกันถ้ามีคนรู้วิธีที่ง่ายกว่า แต่เดิมฉันคิดคล้ายกับ @Rx_ ที่ฉันสามารถแปลงแรสเตอร์เป็นเวกเตอร์จากนั้นพูดคุยทั่วไปและฉันจะทำ สิ่งที่ฉันต้องทำนั้นนานกว่ามาก


3

ฉันชอบคำตอบที่นี่ แต่ฉันไม่สามารถเชื่อว่า QGIS ยังไม่มีวิธีที่ง่ายและรวดเร็วในการทำเช่นนี้ MapInfo สามารถสร้างรูปทรงเป็นรูปหลายเหลี่ยมหรือเส้นที่มีช่วงเวลาใด ๆ ที่คุณสามารถระบุ

ดูเหมือนว่าเป็นงานขั้นพื้นฐานและสำคัญต่อการได้รับขอบเขต หากใครมีวิธีการอัปเดตหรือเร็วกว่านี้โปรดแชร์!


1

วิธีที่ตรงกว่าคือการใช้gdal_countourโดยตรง (เป็นโปรแกรมบรรทัดคำสั่ง) ใน "โหมดรูปหลายเหลี่ยม" (นั่นคือพร้อมกับ-pตัวเลือก)

ตัวอย่าง:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

เอกสารประกอบ: https://gdal.org/programs/gdal_contour.html

ตัวเลือกนี้มีเฉพาะในเวอร์ชัน> = 2.4 (สามารถตรวจสอบได้gdalinfo --version) หากคุณใช้ Ubuntu 18.4 คุณอาจต้องติดตั้งจากUbuntuGIS


0

ใน QGIS 3.8 คุณสามารถใช้ Raster - Extraction - Contour

มีตัวอย่างที่ดีที่นี่https://support.dronesmadeeasy.com/hc/en-us/articles/217759823-Using-QGIS-to-make-custom-Contour-Maps


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