เปรียบเทียบบรรทัดที่คล้ายกันและเลเยอร์อัปเดต


16

ที่นี่มีสองชั้นที่มีการแสดงถนนและความคิดคือ: เราต้องการอัปเดตเลเยอร์ล่าสุด (ด้วยสายสีแดง) ด้วยข้อมูลบางส่วนที่เก็บอยู่ในอีกชั้นหนึ่ง (สีฟ้าอ่อน) แต่เลเยอร์เหล่านี้เป็น ที่คล้ายกันในตำแหน่งทางภูมิศาสตร์ที่สามารถอยู่ใกล้และไกลกว่าเล็กน้อยขึ้นอยู่กับสถานที่ในแผนที่และมีเพียงหนึ่งแอตทริบิวต์ที่ตรงกันในกรณีที่บรรทัดนั้นเหมือนกันในอีกอันหนึ่ง (codlog x codlog5)

เลเยอร์ Qgis

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

ฉันจะทำมันได้อย่างไร มีปลั๊กอินหรือเครื่องมือที่ช่วยด้วยหรือไม่


คุณต้องการอัปเดตเลเยอร์สีแดงด้วยแอททริบิวต์จากเลเยอร์สีน้ำเงินหรือด้วยฟีเจอร์เพิ่มเติมจากเลเยอร์สีน้ำเงินหรือไม่
dmh126

คุณสมบัติ สถานการณ์: เลเยอร์สีแดงมีคอลัมน์ (a, b, c, d) และสีน้ำเงินหนึ่งคอลัมน์ (d, e, f) ฉันต้องการเพิ่มเลเยอร์สีแดงในคอลัมน์ (e, f) จากเลเยอร์อื่นและผลลัพธ์ที่ตรงกับ
Jhonatan Oliveira

มีเอกสารบางส่วนที่นี่สำหรับปลั๊กอิน conflation ไม่แน่ใจว่าการพัฒนาจะเสร็จสมบูรณ์หรือไม่
Barbarossa

1
คุณเคยลอง Jump ไหม?
radouxju

แต่คอลัมน์ "d" ของเส้น blu และ "d" ของเส้นสีแดงนั้นเป็นรหัสทั่วไปที่ไม่ซ้ำกันใช่ไหม มีอะไรบ้าง
Sergio

คำตอบ:


6

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

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

  1. ใช้ชุดรูปทรงเรขาคณิตที่ดี (ซึ่งคุณต้องการให้แอตทริบิวต์สิ้นสุด) และสร้างบัฟเฟอร์ของมัน *

  2. ทำซ้ำผ่านคุณสมบัติบัฟเฟอร์แต่ละรายการ:

    2a คำนวณการวางแนวทั่วไปของสถานที่ (max_y - min_y / max_x - min_x หรืออะไรทำนองนั้น)

    2b ทำการเลือกตามการค้นหาสถานที่ในเลเยอร์อื่นโดยใช้คุณสมบัติเดียว

    1. คุณจะมีมากกว่าหนึ่งคุณลักษณะที่ตรงกับการค้นหาตามสถานที่ดังนั้นจึงวนซ้ำผ่านคุณสมบัติที่เลือกเหล่านี้และคำนวณการวางแนวของแต่ละสถานที่

    2. รับคุณลักษณะจากคุณลักษณะใดก็ตามที่มีการวางแนวที่ใกล้เคียงที่สุดของคุณสมบัติบัฟเฟอร์

* ฉันจะเริ่มต้นด้วยระยะทางที่เล็กมาก (หนึ่งหน่วยแผนที่หรือบางอย่าง) จากนั้นเรียกใช้กระบวนการนี้โดยเพิ่มระยะทางระวังอย่าเขียนทับคุณลักษณะใด ๆ ที่คุณถ่ายโอนไปแล้ว

** จริง ๆ แล้วคุณอาจละทิ้งการสร้างคุณสมบัติของบัฟเฟอร์และเพียงทำการเลือกโดยการค้นหาสถานที่ที่มีระยะห่างบัฟเฟอร์ใน ฉันไม่คุ้นเคยกับ QGIS มากนัก แต่ฉันแน่ใจว่าคุณสามารถทำเช่นนั้นได้

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

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

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

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

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


ตรรกะนั่นคือเสียง ฉันใช้วิธีที่คล้ายกันใน C # / ArcObjects เพื่อคัดลอกแอตทริบิวต์จากชุดข้อมูลที่ไม่ถูกต้องพร้อมแอตทริบิวต์ไปยังชุดข้อมูลที่ถูกต้องโดยไม่มีแอตทริบิวต์ ... ถูกต้อง 95% การตรวจสอบ / แก้ไขด้วยตนเองเป็นสิ่งจำเป็นในพื้นที่ จำกัด แต่แน่นอนเร็วกว่าการทำด้วยตนเองทั้งหมด
Michael Stimson

2

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

ผมเคยเขียนเกี่ยวกับที่นี่

  1. คลิกขวาที่เลเยอร์เชปสีแดงของคุณบนชั้นแผงและเลือกProperties
  2. จากนั้นไปที่แท็บJoins
  3. กดปุ่ม+มันจะสร้างการเข้าร่วมใหม่
  4. เข้าร่วมชั้นเป็นชั้นรูปร่างของคุณสีแดง ฟิลด์เข้าร่วมเป็นฟิลด์ที่มีค่าทั่วไปในทั้งสองอย่าง เขตข้อมูลเป้าหมายเป็นเขตข้อมูลของคุณที่คุณต้องการเข้าร่วมจากชั้นสีน้ำเงิน
  5. หลังจากนั้นคุณจะได้รับคุณสมบัติใหม่ในตารางรูปร่างของคุณ

แค่นั้นแหละ.

ที่นี่คุณมีตัวอย่างพร้อมภาพหน้าจอ


1

ฉันชอบคำตอบจาก @ dmh126 มากเพราะวิธีการของเขาทำให้เลเยอร์red_lineของคุณได้รับการอัปเดตอย่างง่ายดาย

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

เข้าร่วมตารางคุณสมบัติ


0

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

หากไม่เป็นปัญหาที่ค่อนข้างยาก ฉันสงสัยว่าทำไมความคิดเห็นจากผู้ใช้ 30184 แนะนำให้ใช้ OpenJUMP และปลั๊กอินhttp://www.vividsolutions.com/products.asp?catg=spaapp&code=roadmatcherไม่ได้โพสต์แทนคำตอบเพราะฟังดูสมบูรณ์สำหรับฉันในกรณีนี้

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

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

for r_line in red_lines:
  r_line_buf = r_line.buffer()
  intersecting_b_lines = []
  for b_line in blue_lines:
    if r_line_buf.intersects(b_line):
      intersect_length = calculateIntersectionLength(r_line_buf,b_line)
      b_line_values = getAttributes(b_line)
      intersecting_b_lines.append((b_line_values,intersect_length))
  b_line_best_fit = findLongestLineWithinIntersected(intersecting_b_lines)
  r_line_length = r_line.length
  b_vs_r_line_ratio = compareLength(r_line_length,b_line_best_fit)
  saveToNewColumns(r_line, b_line_best_fit.Atribute1, b_line_best_fit.Atribute2..., b_vs_r_line_ratio)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.