อัลกอริทึม: ย้ายโพลีไลน์ต้นทางไปยังโพลีไลน์อ้างอิง (สมบูรณ์หรือบางส่วน)


10

ในระบบของเรามีข้อกำหนดที่เราต้องการย้ายบรรทัดซอร์สบางส่วน (ที่มีความแม่นยำต่ำ) ไปยังบรรทัดอ้างอิง (ที่มีความแม่นยำสูง) รูปภาพต่อไปนี้ให้กรณีการใช้งานปกติ เส้นสีแดงเป็นเส้นแหล่งที่มาและเส้นสีฟ้าเป็นเส้นอ้างอิง

สีแดงคือบรรทัดซอร์สและสีน้ำเงินหนึ่งคือบรรทัดอ้างอิง

สำหรับกรณีนี้บรรทัดที่มาจะถูกย้ายบางส่วนและผลที่ได้จะเป็นเส้นสีเขียวแสดง:

ย้ายผล 1

มีสถานการณ์ที่ต้องย้ายบรรทัดซอร์สอย่างสมบูรณ์

ตัวอย่างที่ 2

ผลลัพธ์:

ย้ายผล 2

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

วิธีนี้ใช้ได้ผลกับกรณีส่วนใหญ่ แต่มีบางกรณีที่วิธีนี้ใช้ไม่ได้ โดยเฉพาะอย่างยิ่งเมื่อบรรทัดใดบรรทัดหนึ่งมีรูปร่าง "C" หรือจุดหัวใกล้กับจุดสิ้นสุดมาก ภาพสองภาพถัดไปให้สถานการณ์

C ชอบเส้นรูปร่าง

ใช้อัลกอริทึมของฉันเราจะได้ผลลัพธ์:

ผล

เป็นวิธีที่เข้าใจได้เพราะอัลกอริทึมปัจจุบันเพิ่งพบจุดที่ฉายและแยกบรรทัด

สิ่งที่เราคาดหวังคือสิ่งนี้:

ผลลัพธ์ที่คาดหวัง

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

มีใครเคยเจอปัญหาที่คล้ายกันมาก่อนหรือไม่ มันจะดีถ้ามีซอฟต์แวร์หรือไลบรารีสามารถทำงานที่คล้ายกัน คำตอบใด ๆ ที่จะได้รับการชื่นชม


1
บางทีมันอาจจะช่วยคุณได้เมื่อคุณมองว่า Topology ใน ArcGIS ตรวจสอบว่าวัตถุเป็นเรื่องบังเอิญหรือไม่: help.arcgis.com/th/arcgisdesktop/10.0/help/index.html#//วรรควรรค
Jens

ขอบคุณสำหรับคำตอบของคุณ @Jens แต่ฉันกลัวว่าไม่ใช่สิ่งที่ฉันต้องการ
mfdev

บรรทัดเหล่านี้แสดงถึงเครือข่ายหรือไม่ มีความสัมพันธ์ระหว่างทอพอโลยีหรือไม่
Julien

มันไม่จำเป็นต้องเป็นเครือข่ายและอาจไม่มีความสัมพันธ์แบบทอพอโลยี
mfdev

คำตอบ:


4

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


ตัวอย่างที่คล้ายคลึงกันนี้สามารถเห็นได้ที่นี่: vividsolutions.com/jcs JCS ไปไกลโดยอัตโนมัติเพื่อให้เกิดความสับสนทางเรขาคณิต แต่ยังรวมถึงคู่มือการใช้งาน QA สำหรับรูปทรงเรขาคณิตที่ไม่สามารถผสานได้อย่างสมบูรณ์ vividsolutions.com/… สร้างขึ้นจากมันและอนุญาตให้มีการควบคุมคุณภาพและเพิ่มการติดตามปัญหาสำหรับรูปทรงเรขาคณิตที่ยากลำบาก
DPierce

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

2

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

ฉายจุดหัวจากบรรทัดซอร์สไปยังบรรทัดอ้างอิง แบ่งบรรทัดอ้างอิงที่จุดฉายภาพนี้

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

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

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

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

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