วิธีลดความซับซ้อนของเครือข่าย Line Line เพื่อรักษาโทโพโลยี


9

ฉันมี Shapefile (ประกอบด้วยถนนสายหลักในยุโรป) ประมาณ 250,000 เซ็กเมนต์ซึ่งฉันต้องทำให้ง่ายขึ้นสำหรับการเริ่มต้น แต่ฉันไม่สามารถหาวิธีที่จะทำอย่างถูกต้อง

นี่คือสิ่งที่ดูเหมือนว่า:

http://i.stack.imgur.com/qJ2OJ.png

และนี่คือสิ่งที่ควรมีลักษณะ:

http://i.stack.imgur.com/FN4Z6.png

ฉันจะต้องลบทุกจุดของเส้นที่เชื่อมต่อกับน้อยกว่า 3 เส้น (ไม่ใช่จุดตัด) ในขณะที่รักษาการเชื่อมต่อทอพอโลยีระหว่างจุดที่เหลือ หากใครมีความคิดมันก็จะได้รับการชื่นชมอย่างมาก!

ขอแสดงความนับถืออย่างสูง

แก้ไข:ฉันพยายามใช้ความคิดของ @dkastl และจัดการเพื่อรับโหนดที่ไม่จำเป็นเท่านั้น (โหนดที่มี linestrings ติดกันเพียง 2) จากเครือข่ายของฉันด้วยรหัสด้านล่าง (การสร้างเครือข่ายที่นำมาจากบล็อกของ underdark http://underdark.wordpress.com / 2011/02/07 / a- เริ่มต้น -to-pgrouting / ):

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

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


1
ทำไมคุณต้องทำสิ่งนี้เพื่อ pgRouting? หากคุณมี ID ต้นทาง / ปลายทางที่กำหนดไว้แล้วคุณสามารถสร้างรูปทรงเรขาคณิตใหม่ได้ด้วย linestrings จะมี ID ต้นทางและเป้าหมายเท่านั้น นั่นควรดูเหมือนภาพที่สองของคุณ
dkastl

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

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

@dkastl: ความคิดที่ดีมาก! ฉันอัปเดตคำถามของฉันซึ่งแสดงว่าฉันไปถึงได้ไกลแค่ไหน
chriserik

คำตอบ:


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