นี่คือคำสั่ง v.net.pathgrass ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
v.net.path - ค้นหาเส้นทางที่สั้นที่สุดบนเครือข่ายเวกเตอร์
KEYWORDS
เวกเตอร์ เครือข่าย เส้นทางที่สั้นที่สุด
เรื่องย่อ
v.net.path
v.net.path --ช่วยด้วย
v.net.path [-gs] อินพุต=พร้อมชื่อ เอาท์พุต=พร้อมชื่อ [ชนิด=เชือก[,เชือก-arc_layer=เชือก]
[node_layer=เชือก] [ไฟล์=พร้อมชื่อ] [arc_คอลัมน์=เชือก] [arc_backward_column=เชือก]
[node_column=เชือก] [dmax=ลอย-เขียนทับ-ช่วย-ละเอียด-เงียบสงบ]
-ui]
ธง:
-g
ใช้การคำนวณ geodesic สำหรับตำแหน่งลองจิจูด-ละติจูด
-s
เขียนเอาต์พุตเป็นส่วนอินพุตดั้งเดิม ไม่ใช่แต่ละเส้นทางเป็นหนึ่งบรรทัด
--เขียนทับ
อนุญาตให้ไฟล์เอาต์พุตเขียนทับไฟล์ที่มีอยู่
--ช่วยด้วย
พิมพ์สรุปการใช้งาน
--รายละเอียด
เอาต์พุตโมดูล verbose
--เงียบ
เอาต์พุตโมดูลเงียบ
--UI
บังคับให้เปิดใช้กล่องโต้ตอบ GUI
พารามิเตอร์:
อินพุต=พร้อมชื่อ [ที่จำเป็น]
ชื่อของแผนที่เวกเตอร์อินพุต
หรือแหล่งข้อมูลสำหรับการเข้าถึง OGR โดยตรง
เอาท์พุต=พร้อมชื่อ [ที่จำเป็น]
ชื่อสำหรับแผนที่เวกเตอร์เอาต์พุต
ชนิด=สตริง[,สตริง-
ประเภทอาร์ค
ประเภทคุณสมบัติอินพุต
ตัวเลือก: บรรทัด เขตแดน
ค่าเริ่มต้น: เส้นเขตแดน
arc_layer=เชือก
ชั้นอาร์ค
คุณลักษณะเวกเตอร์สามารถมีค่าหมวดหมู่ในชั้นต่างๆ ตัวเลขนี้กำหนด
ใช้ชั้นไหน เมื่อใช้กับการเข้าถึง OGR โดยตรง นี่คือชื่อเลเยอร์
ค่าเริ่มต้น: 1
node_layer=เชือก
ชั้นโหนด
คุณลักษณะเวกเตอร์สามารถมีค่าหมวดหมู่ในชั้นต่างๆ ตัวเลขนี้กำหนด
ใช้ชั้นไหน เมื่อใช้กับการเข้าถึง OGR โดยตรง นี่คือชื่อเลเยอร์
ค่าเริ่มต้น: 2
ไฟล์=พร้อมชื่อ
ชื่อไฟล์ที่มีจุดเริ่มต้นและจุดสิ้นสุด หากไม่ได้รับ อ่านจาก stdin
arc_คอลัมน์=เชือก
อาร์คไปข้างหน้า/คอลัมน์ต้นทุนทั้งสองทิศทาง (จำนวน)
arc_backward_column=เชือก
คอลัมน์ต้นทุนทิศทางย้อนกลับ (จำนวน)
node_column=เชือก
คอลัมน์ต้นทุนโหนด (หมายเลข)
dmax=ลอย
ระยะทางสูงสุดไปยังเครือข่าย
หากกำหนดจุดเริ่มต้น/จุดสิ้นสุดเป็นพิกัด หากจุดเริ่มต้น/จุดสิ้นสุดอยู่นอกเกณฑ์นี้
ไม่พบเส้นทางและข้อความแสดงข้อผิดพลาดถูกพิมพ์ เพื่อเร่งกระบวนการให้เก็บสิ่งนี้ไว้
มูลค่าให้ต่ำที่สุด
ค่าเริ่มต้น: 1000
DESCRIPTION
v.net.path กำหนดค่าใช้จ่ายน้อยที่สุด เช่น เส้นทางที่สั้นที่สุดหรือเร็วที่สุดบนเครือข่ายเวกเตอร์
ค่าใช้จ่ายอาจเป็นความยาวบรรทัด หรือแอตทริบิวต์ที่บันทึกไว้ในตารางฐานข้อมูล คุณลักษณะเหล่านี้
ค่าจะถูกนำมาเป็นต้นทุนของทั้งเซ็กเมนต์ ไม่ใช่ค่าใช้จ่ายในการสำรวจหน่วยความยาว (เช่น
เมตร) ของส่วน ตัวอย่างเช่น หากจำกัดความเร็วไว้ที่ 100 กม./ชม. ค่าใช้จ่ายถึง
ส่วนถนนยาว 10 กม. ให้คำนวณเป็น
ความยาว / ความเร็ว = 10 กม. / (100 กม./ชม.) = 0.1 ชม.
รองรับการกำหนดต้นทุนสำหรับทั้งส่วนโค้งและโหนด และค่าใช้จ่ายที่แตกต่างกันสำหรับทั้งคู่
ทิศทางของเส้นเวกเตอร์ สำหรับพื้นที่ ต้นทุนจะถูกคำนวณตามเส้นเขตแดน
ต้องเตรียมเวกเตอร์อินพุตด้วย v.net operation=connect เพื่อเชื่อมต่อ
จุดแทนโหนดกลางไปยังเครือข่าย
โหนดและส่วนโค้งสามารถปิดได้โดยใช้ราคา = -1
เส้นทางต้นทุนต่ำสุดถูกเขียนลงในแผนที่เวกเตอร์เอาต์พุตพร้อมตารางแอตทริบิวต์ที่แนบมา
โหนดสามารถ
· ไพพ์เข้าสู่โปรแกรมจากไฟล์หรือจาก stdin หรือ
· กำหนดไว้ในอินเทอร์เฟซผู้ใช้แบบกราฟิก ("ป้อนค่าแบบโต้ตอบ")
ไวยากรณ์เป็นดังนี้:
รหัส start_point_category end_point_category
(ตัวอย่าง: 1 1 2)
or
รหัส start_point_x start_point_y end_point_x end_point_y
จุดที่ระบุตามหมวดหมู่จะต้องอยู่บนโหนดเครือข่ายทุกประการ และอินพุตเวกเตอร์ map
ต้องเตรียม v.net operation=connect
เมื่อระบุพิกัด ระบบจะใช้โหนดเครือข่ายถัดไปไปยังคู่พิกัดที่กำหนด
ตารางแอตทริบิวต์จะมีแอตทริบิวต์ต่อไปนี้:
· cat - หมวดหมู่เฉพาะเส้นทางที่กำหนดโดยโมดูล
· id - รหัสเส้นทาง (อ่านจากอินพุต)
· fcat - จากหมวดหมู่จุด
· tcat - ชี้หมวดหมู่
· sp - สถานะผลลัพธ์:
· 0 - ตกลง พบเส้นทาง
· 1 - ไม่สามารถเข้าถึงโหนดได้
· 2 - ไม่มีหมวดหมู่ที่กำหนด
· ค่าใช้จ่าย - ค่าเดินทาง (ในเครือข่าย ไม่ใช่ เข้า/ออกจากเครือข่าย)
· fdist - ระยะทางจากจุดแรกไปยังเครือข่าย
· tdist - ระยะทางจากเครือข่ายไปยังจุดที่สอง
หมายเหตุ
โหนดและส่วนโค้งสามารถปิดได้โดยใช้ราคา = -1
ถ้าคอลัมน์ต้นทุน arc_คอลัมน์, arc_backward_column และ node_column ไม่ได้ระบุไว้
วัดความยาวของส่วนเครือข่ายและคิดค่าใช้จ่ายเป็นศูนย์สำหรับโหนด
เมื่อใช้แอตทริบิวต์ ความยาวของเซ็กเมนต์จะไม่ถูกใช้ เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
ต้องคำนึงถึงความยาวบรรทัดเมื่อกำหนดต้นทุนเป็นแอตทริบิวต์ ตัวอย่างเช่น ถึง
รับ ที่เร็วที่สุด เส้นทางจำเป็นต้องมีคอลัมน์ 'max_speed' และ 'length' ถูกต้อง
คุณสามารถค้นหาเส้นทางที่เร็วที่สุดได้โดยการระบุ arc_column=length/max_speed ถ้ายังไม่ได้
ที่มีอยู่ คอลัมน์ที่มีความยาวบรรทัด ("ความยาว") ต้องเพิ่มแอตทริบิวต์
ตารางที่ใช้ v.to.db.
ตัวอย่าง
เส้นทางที่สั้นที่สุด (สีแดง) และเร็วที่สุด (สีน้ำเงิน) ระหว่างโหนดดิจิทัลสองโหนด (Spearfish):
#ปลากระพง
echo "1|601955.1|4916944.9|เริ่ม
2|594385.6|4921565.2|end" | v.in.ascii in=- cat=1 x=2 y=3 out=startend col="cat integer, \
ความแม่นยำสองเท่าตะวันออก, ความแม่นยำสองเท่าทางเหนือ, ฉลาก วาร์ชาร์(6)"
v.db.เลือกจุดเริ่มต้น
g.copy vect=ถนน,ถนนของฉัน
#สร้างเส้นแมปจุดเชื่อมต่อเครือข่าย
v.net myroads points=startend out=myroads_net op=เชื่อมต่อ thresh=500 arc_layer=1 node_layer=2
#ตั้งค่าต้นทุน
# สร้างหมวดหมู่ที่ไม่ซ้ำกันสำหรับแต่ละถนนในเลเยอร์ 3
v.หมวดหมู่ in=myroads_net out=myroads_net_time opt=add cat=1 layer=3 type=line
# เพิ่มตารางใหม่สำหรับเลเยอร์ 3
v.db.addtable myroads_net_time layer=3 col="cat integer,label วาร์ชาร์(43), ความแม่นยำสองเท่าความยาว, ความแม่นยำสองเท่าความเร็ว, ความแม่นยำสองเท่าต้นทุน, ความแม่นยำสองเท่า bcost "
#คัดลอกประเภทถนนไปยังชั้น3
v.to.db myroads_net_time layer=3 qlayer=1 opt=query qcolumn=label คอลัมน์=label
# อัปโหลดความยาวถนนเป็นไมล์
v.to.db myroads_net_time layer=3 type=line option=length col=ความยาวหน่วย=ไมล์
# กำหนดขีด จำกัด ความเร็วเป็นไมล์ / ชั่วโมง
v.db.update myroads_net_time layer=3 col=ความเร็ว val="5.0"
v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='interstate'"
v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='primary highway, hard surface'"
v.db.update myroads_net_time layer=3 col=speed val="50.0" where="label='secondary highway, hard surface'"
v.db.update myroads_net_time layer=3 col=speed val="25.0" where="label='light-duty road, updated surface'"
v.db.update myroads_net_time layer=3 col=speed val="5.0" where="label='unimproved road'"
# กำหนดค่าใช้จ่ายในการเดินทางเป็นเวลาเดินทางเป็นนาที:
#กำหนดต้นทุนล่วงหน้า
v.db.update myroads_net_time layer=3 col=cost val="ความยาว / ความเร็ว * 60"
#ตั้งต้นทุนย้อนหลัง
v.db.update myroads_net_time layer=3 col=bcos val="ความยาว / ความเร็ว * 60"
# ... โหนด 'เริ่มต้น' และ 'สิ้นสุด' มีหมวดหมู่หมายเลข 1 และ 2
# เส้นทางที่สั้นที่สุด: ID เป็นตัวเลขแรก จากนั้น cat1 และ cat2
echo "1 1 2" | v.net.path myroads_net_time arc_layer=3 node_layer=2 out=mypath
# เส้นทางที่เร็วที่สุด: ID เป็นตัวเลขแรก จากนั้น cat1 และ cat2
echo "1 1 2" | v.net.path myroads_net_time arc_layer=3 node_layer=2 arc_column=ราคา arc_backward_column=bcost out=mypath_time
หากต้องการแสดงผล ให้รันเช่น:
g.region vector=ถนนของฉัน_net
ดีมอน x0
d.vect myroads_net
#แสดงเส้นทางที่สั้นที่สุด
d.vect mypath col=ความกว้างสีแดง=2
#แสดงเส้นทางที่เร็วที่สุด
d.vect mypath_time col=สีน้ำเงิน width=2
#จุดเริ่มต้นและจุดสิ้นสุด
d.vect myroads_net icon=พื้นฐาน/สามเหลี่ยม fcol=ขนาดสีเขียว=12 ชั้น=2
d.font font=เวร่า
d.vect startend disp=cat type=point lsize=14 layer=2
ใช้ v.net.pathgrass ออนไลน์โดยใช้บริการ onworks.net