สร้างตารางใกล้เคียงกับจำนวนเพื่อนบ้าน x โดยใช้อาร์คpy


9

มีฉากที่น่าจะเป็น 3 ฉากที่ฉันพยายามจับภาพในระยะใกล้

  1. สถานีรถไฟใต้ดินแลกเปลี่ยนซึ่งมีสถานีใกล้เคียง 2 แห่งขึ้นไป นั่นคือสถานีที่มีปัญหาเชื่อมต่อ 2 เส้นทางหลักหรือมากกว่าและมีสถานีใกล้เคียง 2 แห่งขึ้นไป
  2. สถานีรถไฟใต้ดินเทอร์มินัลซึ่งมีสถานีใกล้เคียงเพียง 1 แห่ง นี่คือสถานีที่ส่วนท้ายของบรรทัด
  3. สถานีรถไฟใต้ดินแบบอินไลน์ซึ่งมีสถานีใกล้เคียง 2 แห่งซึ่งเป็นหนึ่งในแนวทางใดวิธีหนึ่ง

ฉันพยายามคำนวณค่าที่อาจเรียกว่า "ระยะทางเฉลี่ยระหว่างสถานีใกล้เคียง"

arcpy.GenerateNearTable_analysis()สามารถจัดการกับสองตัวเลือก: ระยะทางคุณลักษณะที่อยู่ใกล้และระยะห่างระหว่างคุณลักษณะทั้งหมด

ใครบ้างมีวิธีที่ชาญฉลาดสำหรับการแก้ไขสถานการณ์เหล่านี้? โปรดทราบว่าแต่ละสถานีได้รับการกำหนดให้เป็น "Interchange", "Terminal" หรือ "Inline" ในตารางคุณสมบัติใต้ช่อง "StationType"

ที่เพิ่ม:

นี่คือรหัส psuedo บางส่วนตามคำแนะนำของ @ whuber ในความคิดเห็น ฉันยังไม่มีเวลาคิดออกดังนั้นถ้าใครอยากแทงมันคุณจะได้รับเครื่องหมายถูก! ;)

ฉันดูห้องสมุดNetworkXและดูเหมือนว่าจะทำงานได้ตามที่ต้องการ

รับกราฟ:

A —― B ―― C ―― D
     |
     E

เช่นเดียวกับโหนดและลิงก์:

Nodes = ["A", "B", "C", "D", "E"]
Links = [("A", "B"), ("B", "C"), ("C", "D"), ("B", "E")]

def myFunction(node):
    identify the links that node belongs to
    count the number of links
    calculate the total link lengths
    divide the total link lengths by the number of links
    return someValue

ฉันเดาฉันสามารถพูดถึงว่าฉันกำลังใช้ ArcGIS 10.1 และฉันชอบโมดูล arcpy.da (สำหรับความเร็วของมัน) ฉันหวังว่าเราจะใช้มันได้
Michael Markieta

3
FWIW นี่เป็นปัญหาเชิงกราฟเชิงทฤษฎีพร้อมโซลูชันมาตรฐาน: คุณค้นหากราฟย่านของแต่ละจุดยอด สามารถใช้ได้เกือบจะทันทีที่คุณเป็นตัวแทนเครือข่ายในรูปแบบมาตรฐานเช่นDCEL (หรือการวางนัยทั่วไปหากเครือข่ายที่ไม่ใช่ภาพถ่าย) สิ่งนี้ชี้ให้เห็นว่าอาจมีโซลูชัน Python นอกกรอบบางรายการ
whuber

คำตอบ:


5

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

สำหรับกราฟ G ที่กำหนดโดยมีจุดยอดของ {v 1 , v 2 , ... , v n } โดยที่nคือจำนวนจุดยอดคุณต้องสร้างเมทริกซ์ขนาด M i, jโดยที่ i = n และ j = n แต่ละจุดยอดจะแสดงในแถวที่iตามจำนวนเส้นทางที่พบกับจุดยอดที่อยู่ติดกันในคอลัมน์j th

ตัวอย่างด้านล่าง:

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

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

หมายเหตุ: สมมติว่าไม่มีสถานีใดวนซ้ำบนตัวเองแถวk th จะไม่มีค่าอื่นนอกเหนือจาก 0 ในคอลัมน์k th คำจำกัดความด้านล่างทั้งหมดถือว่าสิ่งนี้เป็นจริง

หมายเหตุ: สมมติว่าไม่มีบรรทัดที่เกิดขึ้นพร้อมกันระหว่างสถานีเดียวกันตัวอย่างทั้งหมดด้านล่างถือว่าค่าของเซลล์จะเป็น 1 หรือ 0 เท่านั้นตัวอย่างด้านบนนี้ยังถือว่าอนุญาตให้มีการเดินทางแบบสองทิศทางได้

กฎการระบุหมวดหมู่สถานี:

1. เทอร์มินัล

เทอร์มินัลจะถูกระบุโดยแถวk ที่มีคอลัมน์เดียวซึ่งไม่มีค่า 0 และค่าใดคือ 1 ดูจุดยอด 1, 2 และ 3 ในตัวอย่างที่ 1 ด้านบน

2. ทางแยก

ทางแยกจะถูกระบุโดยแถวที่k ที่มีมากกว่าสองคอลัมน์ที่มีค่า 1 ดูจุดยอด 4 ในตัวอย่างที่ 1 ข้างต้นหรือจุดยอดทั้งหมดในตัวอย่างที่ 3 ด้านบน

3. Inline

สถานีแบบอินไลน์มีความหมายโดยมี 2 คอลัมน์ในแถวkที่มีค่าเท่ากับ 1 ดูจุดยอดทั้งหมดในตัวอย่างที่ 2 ด้านบน (ไม่ต้องสนใจความจริงที่ว่า {v 1 , v 3 } ปริภูมิ {v 2 , v 4 })


คุณเป็นใครและมาจากไหน! นั่นเป็นหนึ่งในคำตอบที่ดีที่สุดที่ฉันได้รับในเวลานาน ขอบคุณ @Geoist
Michael Markieta

@MichaelMarkieta เรื่องตลกฉันเพิ่งเรียนรู้เกี่ยวกับเรื่องนี้ไม่ได้ 2 ชั่วโมงก่อนที่ฉันจะเห็นโพสต์ของคุณ
nagytech

1

คุณอาจลองใช้หุ่นดี หากคุณแปลงคะแนน arcpy ของคุณเป็นหุ่นดีคุณสามารถคำนวณระยะทางระหว่างคะแนนแต่ละจุดได้

import arcpy
import shapely

arc_point1 = arcpy.Point(1,1)
arc_point2 = arcpy.Point(5,5)

shp_point1 = shapely.geometry.Point(arc_point1.X, arc_point1.Y)
shp_point2 = shapely.geometry.Point(arc_point2.X, arc_point2.Y)

distance = shp_point1.distance(shp_point2)
print "distance:", distance

ฉันควรจะกล่าวว่า Shapely สามารถใช้สำหรับฟีเจอร์บนเครื่องบินคาร์ทีเซียนเท่านั้นดังนั้นวิธีนี้จะไม่ทำงานหากข้อมูลของคุณอยู่ในพิกัดทางภูมิศาสตร์
Cyrus

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

@whuber โอ๊ะโอ! ตกลงฉันตอบคำถามเร็วไปหน่อย
Cyrus

@whuber เป็นเครื่องหมาย
ฮาร์ต

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