การค้นหาเมือง "เทอร์มินัล" บนแผนที่


13

ฉันต้องการที่จะพบกับหมู่บ้าน / เมืองซึ่งเป็นที่สิ้นสุด นั่นหมายถึง: ฉันต้องการหมู่บ้านนี้ซึ่งเชื่อมโยงกับหมู่บ้านสูงสุดหนึ่งหมู่บ้านในระยะทางXกม.

ฉันแค่สงสัยว่าอัลกอริทึมนี้มีชื่อว่าอย่างไร (ฉันคิดว่ามีคนสร้างบางสิ่งที่คล้ายกันมาก่อน)

มีเครื่องมือสำหรับสิ่งนี้หรือไม่? แนวคิดนี้เรียกว่าอย่างไร?

เช่น

 City ------------ Village 1 ------- Village 2 ------ Village 3 - - - [ Mountain]
                    \                 \                                \
                     Village 4         |                                Road
                     |                  \                            in mountains
                     Village 5----------Village6---------Village7 - - - - -  

ตราบใดที่ถนนในภูเขายาวกว่า Xkm Village 3และVillage 7จะถือว่าเป็นปลายทางของฉันเพราะพวกเขาเชื่อมโยงกับหนึ่งหมู่บ้าน (V2 ตามลำดับ V6)

มิฉะนั้นฉันจะต้องการสร้างด้วยข้อมูลเปิดที่เรามี


สิ่งที่ฉันได้ลอง :

การดาวน์โหลดข้อมูล OSM สำหรับประเทศของฉัน (โรมาเนีย) และนำเข้าหมู่บ้านและเมืองต่างๆในฐานข้อมูล การใช้ฟังก์ชั่นระบุตำแหน่งทางภูมิศาสตร์จากฐานข้อมูลฉันสามารถค้นหาหมู่บ้านที่ไม่มีหมู่บ้านมากกว่าXในรัศมีRกม.

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


3
แนวคิดคือการเชื่อมต่อและในทฤษฎีกราฟจะแสดงเป็นจำนวน 'edge' a 'node' ได้ คุณกำลังมองหาโหนดที่มีขอบเดียวหลังจากคุณกรองขอบที่อยู่เหนือเกณฑ์น้ำหนักของคุณ โซลูชันที่แท้จริงนั้นขึ้นอยู่กับเครื่องมือภาษาหรือซอฟต์แวร์ที่คุณใช้ด้วย
RoperMaps

@RoperMaps ฉันยังไม่มีเครื่องมือตั้งค่า แต่ถามโดยทั่วไป (และท้ายที่สุดถ้ามีคนสร้างบางสิ่งเช่นนี้มาก่อน) ฉันจะขยายนี้ให้คะแนน (กี่วิธีที่สั้นกว่า X ที่โหนดมี) ยิ่งมีคะแนนมากเท่าใดก็ยิ่งเชื่อมต่อได้มากขึ้น (และเทอร์มินัลน้อยกว่า ) หากฉันสร้างมันขึ้นมาฉันอาจจะจบลงด้วยการแยกวิเคราะห์กราฟโดยใช้ Node.js แต่แค่สงสัยว่ามีคนอื่นทำมาก่อน : D
IonicăBizău

@ RoperMaps ฉันคิดว่าฉันสามารถใช้ OSM สำหรับสิ่งนี้ แต่ฉันพบว่ามันยากมาก (เช่นมีวิธีการเชื่อมต่อโหนด แต่โหนดเหล่านี้เป็นเพียงจุดไม่ได้เป็นตัวแทนของเมือง) ฉันสามารถเขียนขั้นตอนวิธีการที่จะหาใบไม้ในกราฟหรือบางบิตขยายมากขึ้นสำหรับกรณีของฉัน แต่ฉันไม่แน่ใจว่าจะใช้ข้อมูล OSM สำหรับนี้ (หรือมีวิธีที่ง่ายกว่า OSM?)
IonicăBizău

คุณใช้ซอฟต์แวร์อะไร คุณทำงานในระยะทางจริงหรือในระยะทางบินนก?
radouxju

@radouxju ต้นแบบการทำงานตัวแรกของฉันคือระยะการบินของนก (รัศมีตามพิกัด) –again นั่นเป็นการเริ่มต้น แต่มันไม่ใช่สิ่งที่ฉันต้องการ ฉันเขียนสคริปต์ใน Node.js และใช้ MongoDB ฉันชอบระยะทางจริง ๆ : เช่นถ้ามีสองหมู่บ้านคั่นด้วยเนินเขาไม่มีถนนข้ามเนินเขาระยะทางระหว่างพวกเขาจะเป็นถนนที่สั้นที่สุดที่เชื่อมต่อพวกเขา
IonicăBizău

คำตอบ:


2

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


แล้วจะทำยังไงดีล่ะ?
IonicăBizău

คุณสามารถทำได้ด้วย Modelbuilder และส่งออกไปยัง Python ArcObjects เป็นเส้นทางอื่น แต่ซับซ้อนกว่า คุณเคยใช้ Modelbuilder มาก่อนหรือไม่?
user17260

การเลือกเชิงพื้นที่ด้วยตัวเลือก "สัมผัส" อาจช่วยให้คุณเริ่มต้นได้ อาจ จำกัด ชุดการเลือกดั้งเดิมให้แคบลงเมื่อคุณกลับการเลือกชุดที่เลือกเป็นที่ไม่ได้สัมผัส
user17260

ฉันไม่ได้ใช้ Modelbuilder ฉันต้องการคำตอบทีละขั้นตอนเพราะเป็นครั้งแรกที่ฉันมีปฏิสัมพันธ์กับข้อมูล OSM : D มันยากมากสำหรับฉันที่จะหาบทเรียนเกี่ยวกับมัน
IonicăBizău

ว้าวนั่นเป็นคำขอที่ยิ่งใหญ่ คุณมีสิทธิ์เข้าถึง ArcInfo ของ ArcMap หรือไม่?
user17260

2

คุณอาจจะสามารถที่จะบรรลุนี้โดยใช้QGISและซอฟแวร์ที่มีวัตถุประสงค์เพื่อเริ่มแรกในการคำนวณการเชื่อมต่อภูมิทัศน์เช่นGraphabหรือConefor ตัวอย่างเช่น :

  • นำเข้าข้อมูล OSM ของคุณไปยัง QGIS ไม่ว่าจะโดยการลากแล้วปล่อยหรือโดยใช้ปลั๊กอิน OpenStreetMap
  • บันทึกข้อมูลของคุณเป็นรูปร่าง (คลิกขวา)
  • ใช้ปลั๊กอิน Conefor เพื่อสร้างโหนดและไฟล์การเชื่อมต่อดังที่อธิบายไว้ที่นี่
  • คำนวณความสำคัญของแต่ละโหนดและลิงค์โดยใช้ Conefor "โหนดปลายทาง" จะไม่สำคัญสำหรับการเชื่อมต่อ ฉันคิดว่าคุณสามารถใช้ตัวชี้วัด BC (IIC) ได้เพราะมันคำนึงถึง"จำนวนเส้นทางที่สั้นที่สุดระหว่างแพตช์คู่ทั้งหมดที่ผ่านแต่ละโหนด (... ) [และ] ความยาว (จำนวนลิงก์) ของ เส้นทางระหว่างแพตช์ที่มีโหนดเฉพาะที่เกี่ยวข้อง " (ดูที่นี่ )

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


ขอบคุณสำหรับสิ่งนี้! จะลองเร็ว ๆ นี้ [และ] ความยาว (จำนวนลิงก์) - ที่จะให้ระยะทางฉันเป็นกิโลเมตร (ถ้าไม่ฉันจะได้รับสิ่งนั้นได้อย่างไร)
IonicăBizău

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

นอกจากนี้หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือที่เน้นการเชื่อมต่อแนวนอนคุณอาจต้องการดูการอภิปราย Researchgate นี้
Mefimefi

ฉันพบ QGIS รถบั๊กเล็กน้อย (อย่างน้อยใน macbook ของฉัน) แต่ลิงค์สุดท้ายมีประโยชน์ จะตรวจสอบคำตอบของพวกเขาเช่นกัน ขอบคุณ!
IonicăBizău

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