การสร้างจุดเว้นระยะสม่ำเสมอในรูปหลายเหลี่ยมตามค่าคุณลักษณะโดยใช้ QGIS


11

ฉันมีเลเยอร์หลายเหลี่ยมที่มีค่าแอททริบิวต์แนบมาแทนจำนวนบุคคลภายในรูปหลายเหลี่ยม ฉันใช้ QGIS 3.0

ฉันต้องการให้เห็นภาพการนับเป็นตารางจุดภายในรูปหลายเหลี่ยม (เช่น 1 point = 100 กบสีโดย specie) คะแนนไม่จำเป็นต้องครอบครองรูปหลายเหลี่ยมทั้งหมดและควรวาดรอบ ๆ เซนทรอยด์ด้วยระยะห่างที่กำหนดไว้ล่วงหน้า (เช่น 300 ม.) เพื่อให้สามารถเป็นตัวแทนของกริดที่เป็นระเบียบที่ความละเอียดเฉพาะ

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

โดยสรุป: คะแนนปกติ (กำหนดจำนวนจุด, วาดขอบเขต) สำหรับแต่ละเหลี่ยม (ชุด)> ลบคะแนนพิเศษ> กำหนดค่าคุณลักษณะให้กับ # คะแนน

ทางเลือก (หลีกเลี่ยงการเว้นวรรคที่ผิดปกติ แต่ต้องการการยักย้ายที่มากขึ้น):

คะแนนปกติ (ระยะห่างที่กำหนดคือ 300m) ในขอบเขตของเลเยอร์ทั้งหมด> คลิปไปยังขอบเขตรูปหลายเหลี่ยม> ลบคะแนนพิเศษในรูปหลายเหลี่ยมแต่ละรูปจนกว่าคุณจะได้จำนวนที่ต้องการ> กำหนดค่าแอตทริบิวต์ให้กับคะแนน

ปัญหาหลักของการแก้ไขปัญหาของฉันคือการประมวลผลรูปหลายเหลี่ยมแบบหลายเหลี่ยมซึ่งทำให้ยากต่อการอัปเดตข้อมูลและทำงานกับรูปหลายเหลี่ยมจำนวนมาก

คำถามแบบอะนาล็อกถูกถามว่าเป็นการสร้างระยะห่างอย่างสม่ำเสมอกำหนดจำนวนจุดภายในรูปหลายเหลี่ยมใน QGISแต่ข้อมูลจำเพาะนั้นแตกต่างกัน

ภาพหน้าจอของผลลัพธ์ที่ต้องการ:

แอตทริบิวต์ tableL:


1
รูปภาพในคำถามของคุณแสดงถึงสิ่งที่คุณคาดหวังไว้หรือไม่? การนับคะแนนสีมาจากไหน คุณสามารถเพิ่มตารางคุณลักษณะของเลเยอร์ได้ไหม โดยเฉพาะคุณสมบัติของรูปหลายเหลี่ยมซึ่งรวมถึง Edmonton และ Sherwood Park เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับสีและจำนวน
Kadir Şahbaz

1. นี่เป็นเพียงข้อมูลที่หลอกลวงซึ่งมีส่วนเกี่ยวข้องกับรูปหลายเหลี่ยมจริง ๆ ไม่มากนัก แต่ใช่ฉันคาดหวังผลลัพธ์แบบนั้น แต่มีจุดรอบจุดศูนย์กลางของรูปหลายเหลี่ยม 2. การนับมาจากคอลัมน์ตารางแอตทริบิวต์เนื่องจากมีสามคอลัมน์ / ประเภทของจุดที่ฉันรวมไว้ในหนึ่งคอลัมน์เพื่อรับจำนวนคะแนนที่ถูกต้องต่อรูปหลายเหลี่ยมก่อนแล้วจึงกำหนดแอตทริบิวต์ / สีโดยใช้นิพจน์ แก้ไข: เพิ่มตารางexcelลงในคำถามไม่ได้แทนค่า แต่แสดงถึงโครงสร้างของข้อมูลของฉัน
Ruslan

คำตอบ:


5

QGIS 3 มาพร้อมกับวิธีการกระจัดใหม่ในตัวแสดงผลคลัสเตอร์ที่เรียกว่ากริด ดูเหมือนว่านี่เป็นสิ่งที่คุณต้องการ เพียงแค่สร้างจำนวนคะแนนที่ต้องการที่ centroid ของรูปหลายเหลี่ยมของคุณ

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

ฉันไม่ทราบวิธีการสร้างคะแนนด้วยเครื่องมือ gui เท่านั้น แต่สคริปต์ python ที่ค่อนข้างง่ายควรทำเช่นนั้น

with edit(point_layer):
    for polygon_feature in polygon_layer.getFeatures():
        point_feature = QgsFeature(point_layer.fields())
        point_feature.setGeometry(polygon_feature.geometry().centroid())

        point_feature['type'] = 'Frog'
        for i in range(polygon_feature['Frogs']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Cat'
        for i in range(polygon_feature['Cats']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Diplodoc'
        for i in range(polygon_feature['Diplodocs']):
            point_layer.addFeature(point_feature)

หากคุณต้องการคลั่งไคล้ในขั้นตอนวิธีการประมวลผลแบบกำหนดเอง


ขอบคุณ Matthias ดูเหมือนว่าจะดีกว่าโซลูชันอื่น ๆ คุณสามารถแนะนำวิธีสร้างจำนวนจุดที่ต้องการตามตารางแอตทริบิวต์อย่างรวดเร็วเพื่อให้บรรลุสิ่งนี้หรือไม่?
Ruslan

ฉันไม่ทราบวิธีง่าย ๆ นอกเหนือจากการเขียนสคริปต์หลามเล็ก ๆ น้อย ๆ รหัสนี้ยังไม่ได้ทดสอบทั้งหมดดังนั้นอาจมีการพิมพ์ผิดบางอย่าง;)
Matthias Kuhn

ขอบคุณอีกครั้ง. ฉันอาจจะต้องทำวิชวลไลเซชันที่คล้ายกันสำหรับเลเยอร์ / ขอบเขตอื่น ๆ ดังนั้นฉันจะพยายามสร้างรูปแบบการประมวลผลอย่างน้อยสำหรับสิ่งนี้
Ruslan

5

อาจเป็นอีกวิธีหนึ่งที่สร้างแรงบันดาลใจจากคำตอบของ Sarath SRK:

  1. centroid ของรูปหลายเหลี่ยม
  2. บัฟเฟอร์ใช้นิพจน์กับสี่เหลี่ยมจัตุรัสและปรับให้เข้ากับขนาดของคุณ: (1,000 * (sqrt ("Frogs" + "Cats" + "Diplodocs") / 2)) + 1 และเซกเมนต์ = 1, สไตล์ฝาท้าย = Square
  3. ใหม่จุดกริดที่มีระยะห่างสอดคล้องกันกับขนาดของบัฟเฟอร์
  4. ลบจุดที่ไม่ตัดกับเลเยอร์บัฟเฟอร์ (เลือกตามตำแหน่ง)
  5. เข้าร่วมประกอบโดยสถานที่ตั้ง (คุณสมบัติของบัฟเฟอร์หรือรูปหลายเหลี่ยมเดิม)

แต่คุณจะมีอะไรแบบนี้ ป้อนคำอธิบายรูปภาพที่นี่

  1. ใช้àผู้สร้างแบบกราฟิกเพื่อสร้างฟิลด์ใหม่ด้วย commande "@row_number" ป้อนคำอธิบายรูปภาพที่นี่

  2. ดำเนินการโมเดลด้วยการวนซ้ำบนบัฟเฟอร์เลเยอร์ ป้อนคำอธิบายรูปภาพที่นี่

  3. รวมเลเยอร์ใหม่ทั้งหมด

  4. ลบจุดทั้งหมดด้วยฟิลด์ ID_pt ที่ใหญ่กว่าผลรวมของฟิลด์ของคุณ ("Frogs" + "Cats" + "Diplodocs")

  5. จัดหมวดหมู่ตามกฎ (เช่น
    • "ID_pt" <= "กบ"
    • "ID_pt"> "Frogs" และ "ID_pt" <= ("Cats" + "Frogs")
    • "ID_pt"> ("Cats" + "Frogs") และ "ID_pt" <= ("Cats" + "Frogs" + "Diplodocs") ป้อนคำอธิบายรูปภาพที่นี่

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

1

คุณสามารถใช้เครื่องกำเนิดเรขาคณิตได้

  1. เพิ่ม 3 sublayers ในสัญลักษณ์หนึ่งรายการสำหรับแต่ละสี / คุณสมบัติ
  2. สร้างการแสดงออกที่สร้างหลายรูปหลายเหลี่ยมสำหรับแต่ละชั้นย่อย
  3. ตอนนี้ส่วนที่ยากสร้างชิ้นส่วนสี่เหลี่ยมสำหรับรูปหลายเหลี่ยมตามคุณลักษณะ ฉันเดาว่านี่จะต้องใช้ฟังก์ชันการแสดงผลแบบหลามที่กำหนดเอง
  4. ไม่บังคับใช้ตัวแปรเรนเดอร์สำหรับมาตราส่วนแผนที่เพื่อกำหนดสัดส่วนของรูปหลายเหลี่ยมและระยะห่าง

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

1

ทางออกหนึ่งคือการสร้างเลเยอร์จุดที่มีจุดที่เซนทรอยด์ของรูปหลายเหลี่ยมแต่ละรูป ดังนั้นสำหรับตัวอย่างคุณได้ที่ centroid ของ Edmonton 25 superposed point: 5 ที่มีคุณสมบัติของกบ 20 คะแนนกับ cat และ 0 กับ diplodocs

จากนั้นใช้ตัวแสดงการเปลี่ยนตำแหน่งด้วยวิธีการกำหนดตำแหน่งเป็นตารางคุณควรจะได้รับผลกระทบ

ความยากคือการสร้างเลเยอร์จุด ...


0

ทางเลือกที่ง่ายมากอาจใช้แผนภูมิวงกลมที่มีอยู่ในคุณสมบัติของเลเยอร์ คุณสมบัติและขนาดสามารถกำหนดโดยการแสดงออก

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


2
ฉันรู้วิธีเลือกแผนที่ข้อมูล ประเด็นของคำถามคือทำให้เวิร์กโฟลว์การมองเห็นเป็นไปได้ แผนภูมิวงกลมไม่ทำงานจริง ๆ เพราะเมื่อคุณดูตารางคุณได้รับความรู้สึกที่ดีในการนับจำนวนบุคคล การพยายามประมาณจำนวนแต่ละรูปหลายเหลี่ยมที่แม่นยำจากแผนภูมิวงกลมนั้นเป็นไปไม่ได้เลย
Ruslan

0

คุณสามารถสร้างจุดบนเส้นทางเกลียวเริ่มต้นจากรูปหลายเหลี่ยม centroid โพสต์ Stack Overflowต่อไปนี้มีรหัสหลามเพื่อสร้างจุดที่เท่ากัน แต่ฉันไม่สามารถทดสอบได้ในขณะนี้เนื่องจากไม่มีเวลาว่าง


ดูเหมือนว่าจะใกล้พอ แต่ดังที่กล่าวไว้ในคำถามฉันไม่ชำนาญในการเขียนโค้ดนี้ / เปลี่ยนรหัสที่แนะนำที่นั่น
Ruslan

หวังว่าใครบางคนที่มีความรู้และเวลาเพียงพอจะพูดสอดใน
Techie_Gus

0

ในกรณีของคุณ

  1. สร้างจุดเว้นระยะอย่างสม่ำเสมอโดยใช้ระยะทางที่กำหนดสำหรับ AOI ทั้งหมด
  2. สร้างคะแนน centroid สำหรับรูปหลายเหลี่ยม (อินพุต)
  3. สร้างบัฟเฟอร์ที่จุด centroid ใช้บัฟเฟอร์ระยะคงที่กับกลุ่มค่า '1' มันจะสร้างบัฟเฟอร์สี่เหลี่ยมแทนที่จะเป็นวงกลม (ใช้เครื่องมือหมุนใน Qgis ถ้าคุณต้องการที่จะหมุนรูปหลายเหลี่ยมบัฟเฟอร์)
  4. สร้างการเลือกจุดที่อยู่ภายในบัฟเฟอร์รูปหลายเหลี่ยมโดยใช้เวกเตอร์ -> เครื่องมือวิจัย -> เลือกตามตำแหน่ง (จุดภายในกฎรูปหลายเหลี่ยม)
  5. สลับการเลือกและลบจุดนอกรูปหลายเหลี่ยมบัฟเฟอร์ ดังนั้นตอนนี้คุณได้รับคะแนนเว้นระยะสม่ำเสมอรอบเซนทรอยด์ของรูปหลายเหลี่ยม
  6. ให้คุณลักษณะส่วนใหญ่สำหรับคะแนนทั้งหมดและคะแนนที่เหลือจะต้องจัดประเภทด้วยตนเองใช้เครื่องมือQuickMultiAttributeEditเพื่ออัปเดตแอตทริบิวต์ได้อย่างง่ายดาย

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