เข้าร่วมคุณสมบัติของจุดและเลเยอร์บรรทัดตามตำแหน่ง (ระยะทางที่ใกล้ที่สุด) ใน QGIS


13

ปัญหาของฉันคือต่อไปนี้: ฉันมี line shp (เลเยอร์เป้าหมาย) และจุด shp (เข้าร่วมชั้น) อันที่สอง (เลเยอร์จุด) เก็บแอตทริบิวต์ที่ฉันต้องการเข้าร่วมกับเลเยอร์บรรทัดตามระยะทางที่ใกล้ที่สุดกับบรรทัด จุดและเส้นไม่ตัดกัน

ฉันสามารถทำได้ด้วย ArcGIS และการเข้าร่วมเชิงพื้นที่ (ตัวเลือกการแข่งขัน: ใกล้เคียงที่สุด) แต่ฉันไม่รู้ว่าฉันจะทำสิ่งนี้ได้ใน QGIS


3
มีเครื่องมือในการเข้าร่วมตามสถานที่ แต่ไม่มีตัวเลือก "ใกล้เคียง" ฉันไม่รู้ว่ามีวิธีแก้ปัญหาหรือไม่ โดยทั่วไปโปรดประเมินเพื่อสนับสนุนการพัฒนาตัวเลือก / เครื่องมือที่ขาดหายไปซึ่งเป็นตัวเลือกที่ชื่นชอบมันเป็นวิธีที่ผู้ใช้สามารถช่วยให้ซอฟต์แวร์นี้เติบโตขึ้น
Giovanni Manghi

คำตอบ:


8

ฉันไม่คิดว่าจะมีฟังก์ชั่น 'หลัก' สำหรับ QGIS อย่างไรก็ตามติดตั้งปลั๊กอิน MMQGIS และใช้เครื่องมือ 'ระยะทางฮับ' เลือกคะแนนของคุณเป็นเลเยอร์ "คะแนนต้นทาง" และบรรทัดของคุณเป็น "ปลายทางฮับเลเยอร์" และตั้งค่า "ประเภทรูปร่างขาออก" เป็น "Line to Hub" สิ่งนี้จะทำให้คุณมีรูปร่างไฟล์ของบรรทัด (ที่มีความยาว) ที่เข้าร่วมคุณสมบัติที่ใกล้เคียงที่สุด สะดวกยิ่งขึ้นนอกจากนี้ยังเพิ่ม ID ของคุณสมบัติที่ใกล้เคียงที่สุดลงในตารางแอตทริบิวต์

แก้ไข / ความคิดเห็น: วิธีการนี้ใช้งานได้ดีหากมีคะแนนน้อยกว่าเส้นหรืออื่น ๆ เป็นสถานการณ์แบบจุดต่อจุด การมีคะแนนมากกว่าเส้นทำให้สิ่งต่าง ๆ ซับซ้อน เครื่องมือ 'Hub Distance' เพิ่ม ID ของคุณสมบัติเส้นลงในตารางแอตทริบิวต์จุดเป็น 'HubName' พร้อมกับระยะห่างระหว่างจุดและจุดกึ่งกลางของบรรทัดเป็น 'HubDist' หากมีคะแนนมากกว่าเส้นจำเป็นต้องมีการทำงานเพิ่มเติมเพื่อกำหนดภายในแต่ละเซ็ตย่อยของคะแนน (หลายเรคคอร์ดที่เชื่อมโยงกับฮับแต่ละบรรทัด) ซึ่งอยู่ใกล้กับแต่ละบรรทัดมากที่สุดและ / หรือเป็นหนึ่งเดียวกับชุดที่ต้องการ คุณสมบัติที่จะเข้าร่วมกับสาย


ควรทำเครื่องหมายเป็นคำตอบโดยมีการแก้ไข "lines" v "points" เล็กน้อย
Willy

1
"ระยะทางฮับ" ไม่ใช่เครื่องมือที่ถูกต้องหาก "ระยะทางที่ใกล้ที่สุดกับเส้น" เป็นเกณฑ์ รหัส mmqgis แสดงให้เห็นว่าระยะห่างของฮับใช้การประมาณของเรขาคณิต "ฮับ" การคำนวณระยะทาง (mmqgis_distance) ใช้เวลาสองจุดเป็นพารามิเตอร์ นี่คือรหัสที่ใช้ประมาณของเรขาคณิตฮับใน mmqgis_library.py: "feature.geometry (). boundingBox (). center ()" ซึ่งหมายความว่าใช้จุดกึ่งกลางของกล่องขอบของเรขาคณิตแทนเรขาคณิตจริง ดังนั้นหาก "ระยะทางที่ใกล้ที่สุดกับบรรทัด" เป็นเกณฑ์ GRASS v.distance หรือปลั๊กอิน NNJoin จะเหมาะสมกว่า
Håvard Tveite

5

ฟังก์ชั่นGRASS v.distanceสามารถใช้สำหรับสิ่งนี้ ใน QGIS คุณสามารถเข้าถึงฟังก์ชั่นผ่านปลั๊กอิน GRASS ( เวอร์ชั่นการประมวลผลไม่ทำงาน) NNJoinปลั๊กอิน QGIS อาจจะเป็นทางเลือกที่ง่าย


3

NNJoin ปลั๊กอินไม่เคยให้ฉันลงและทำงานได้ดีกับชุดข้อมูลขนาดใหญ่

ปลั๊กอิน> ติดตั้ง: NNJoin> NNJoin> เลือกเลเยอร์อินพุตและเข้าร่วมเลเยอร์> จากนั้นคลิกเข้าร่วม

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


2

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

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