ระบุจุดใน shapefile ที่ไม่มีจุดอื่นภายใน x km ด้วย QGIS


11

นี่อาจเป็นคำถามที่ไร้เดียงสา แต่ฉันดิ้นรนในฐานะผู้ใช้รายใหม่ของ QGIS

ฉันมีไฟล์รูปร่างที่ใหญ่มาก (275,000 คะแนน แต่สามารถแบ่งออกเป็นย่อย ๆ ประมาณ 10 แห่งหากจำเป็นสำหรับการประมวลผลที่เร็วขึ้น)

ฉันต้องการระบุจุดทั้งหมดที่ไม่มีจุดอื่นภายใน 200 เมตรจากนั้นให้เขียนรหัสแต่ละจุดด้วยค่า "ไม่ซ้ำกัน" ในฟิลด์ของไฟล์

สำหรับจุดอื่น ๆ ทั้งหมดที่เป็นส่วนหนึ่งของกลุ่มท้องถิ่นฉันต้องการรหัสเหล่านั้นเป็น "คลัสเตอร์"

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

ขณะนี้ฉันไม่สามารถบรรลุขั้นตอนที่ 1 ดังนั้นยินดีต้อนรับความช่วยเหลือใด ๆ

คำตอบ:


0

คุณสามารถลองเข้าร่วมด้วยตนเองโดยใช้ปลั๊กอินNNJoinใน QGIS

สำหรับแต่ละฟีเจอร์ของเลเยอร์อินพุทมันจะค้นหาฟีเจอร์ที่ใกล้เคียงที่สุด (ไม่รวมตัวมันเองในกรณีของการรวมตัวเอง) และรวมระยะทางและคุณสมบัติทั้งหมดของฟีเจอร์ที่ใกล้เคียงที่สุดในชุดข้อมูลที่สร้างขึ้น อาจต้องใช้เวลาสักครู่สำหรับชุดข้อมูลของคุณ (ฉันลองด้วยชุดข้อมูลแบบจุดด้วยคุณสมบัติประมาณ 175,000 รายการและใช้เวลาสักครู่ ... )


9

คุณสามารถใช้ Vector> เครื่องมือวิเคราะห์> Distance Matrix และเข้าร่วมเพื่อบรรลุสิ่งที่คุณขอ

ฉันจะใช้เลเยอร์ข้อมูลสนามบินของqgisเพื่อเป็นตัวอย่าง นี่เป็นชุดข้อมูลขนาดเล็กดังนั้นฉันไม่แน่ใจว่ามันจะเป็นอย่างไรกับรูปร่างไฟล์ 275,000 คะแนน

1. สร้างเมทริกซ์ระยะทางโดยใช้เลเยอร์ของคุณเป็นทั้งปลายทางและเป้าหมาย

อย่าลืมทำเครื่องหมาย "ใช้เฉพาะคะแนนเป้าหมาย (k) ที่ใกล้ที่สุด" และตั้งเป็น 1

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

2. เปิด CSV ด้วยเลเยอร์ข้อความที่เพิ่มตัวคั่น

เลือก "เครื่องหมายจุลภาค" เป็นตัวคั่นและตั้งค่าความหมายเรขาคณิตเป็นเรขาคณิต

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

3. สร้างการเข้าร่วมในเลเยอร์ดั้งเดิมด้วยตารางที่สร้างขึ้นใหม่

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

4. ใช้เครื่องคำนวณฟิลด์เพื่อเติมฟิลด์ด้วยค่าที่ต้องการ

เนื่องจากการเข้าร่วมตอนนี้เราสามารถเข้าถึงค่าตารางระยะทางจากภายในตารางแอตทริบิวต์ของสนามบินดังนั้นจึงค่อนข้างง่ายในการสร้างเขตข้อมูลใหม่และเติมด้วยค่า "คลัสเตอร์" และ "ไม่ซ้ำ" ขึ้นอยู่กับค่าเมทริกซ์ระยะทาง . เนื่องจากข้อมูลตัวอย่างของฉันฉันใช้ค่า 1200000 (1200 km) คุณควรปรับให้เข้ากับกรณีของคุณ (200)

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

ในตอนท้ายเลเยอร์ของคุณควรมีฟิลด์ใหม่ที่เรียกว่า point_type ด้วยค่าต่าง ๆ ตามระยะทางต่ำสุดไปยังจุดที่ใกล้ที่สุด

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


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

@LeighBettenay หากคำตอบนี้ตอบคำถามดั้งเดิมของคุณฉันคิดว่าคุณควรจะยอมรับ (เครื่องหมายขีดสีเขียว) เพื่อให้รางวัลแก่ผู้ตอบคำถามและทำการวิจัย / กำหนดความต้องการเพิ่มเติมของคุณเป็นคำถามใหม่ +1 สำหรับคำถามแรกที่ยอดเยี่ยม!
PolyGeo

@PolyGeo ขออภัยฉันใหม่เอี่ยมกับฟอรัมนี้และไม่รู้โปรโตคอล มีความสุขที่ "เห็บสีเขียว" คำตอบที่ยอดเยี่ยม แต่น่าเศร้าไม่รู้วิธี !!
Leigh Bettenay

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