การวิเคราะห์โครงข่ายถนนสามารถทาได้หลายวิธีเช่นการศึกษาสัณฐานของเมือง (urban form) รูปแบบการเดินทาง (transportation studies) รูปแบบการเชื่อมต่อโครงข่าย (topology) อย่างไรก็ดีการวิเคราะห์โครงข่ายถนนของเมืองทั้งเมืองมักประสบปัญหาความไม่สมบูรณ์ของข้อมูล ความซับซ้อนและค่าใช้จ่ายในการจัดเก็บข้อมูล
ในที่นี้จะขอแนะนำ OSMnx ที่พัฒนาโดย Geoff Boeing ซึ่งเป็นแพ็กเกจไพทอนโอเพนซอร์สสาหรับดาวน์โหลดภาพขอบเขตการปกครอง (political/administrative boundary geometry) รูปร่างพื้นที่ฐานอาคาร (building footprint) และโครงข่ายถนนจาก OpenStreetMap
สำหรับคนที่ไม่เคยใช้ไพทอนมาก่อน สามารถอ่านวิธี install ได้ที่นี่
1) กราฟและโครงข่าย
1.1) เกี่ยวกับกราฟ
กราฟในที่นี้หมายถึงแบบจำลองทางคณิตศาสตร์ เป็นแผนภาพที่ประกอบด้วยจุดและเส้นเชื่อมระหว่างจุดใด ๆ จุดที่ปรากฏในแผนภาพเรียกว่าจุดยอด (vertex or node) และเส้นที่เชื่อมระหว่างจุดยอดสองจุดเรียกว่าเส้นเชื่อม (edge or link)

แนวเดิน (walk) คือลำดับของจุดยอดและเส้นเชื่อมสลับกัน
รอยเดิน (trial) คือแนวเดินในกราฟที่เส้นเชื่อมทั้งหมดแตกต่างกัน
วิถี (path) คือแนวเดินในกราฟที่จุดยอดทั้งหมดแตกต่างกัน
วงจร (circuit) คือแนวเดินที่เส้นเชื่อมทั้งหมดแตกต่างกัน โดยมีจุดเริ่มต้นและจุดสุดท้ายเป็นจุดยอดเดียวกัน
วัฏจักร (cycle) คือวงจรที่ไม่มีจุดยอดซ้ำกัน ยกเว้นจุดเริ่มต้นและจุดสุดท้าย
กราฟสามารถนำไปจำลองเพื่อสร้างแผนภาพในหลายสาขาวิชา เช่น แผนภาพแสดงโครงสร้างทางเคมี แผนภาพแสดงวงจรไฟฟ้า แผนภาพแสดงเส้นทางรถไฟฟ้า
ในที่นี้จะใช้กราฟแสดงโครงข่ายถนน โดยให้จุดยอดแทนทางแยก (intersection) และเส้นเชื่อมแทนส่วนของถนน (street segment) ซึ่งจัดเป็นกราฟแบบ primal ในทางกลับกันมีกราฟแบบ dual ซึ่งจุดยอดแทนส่วนของถนนและเส้นเชื่อมแทนทางแยก กราฟแบบ dual เป็นพื้นฐานการวิเคราะห์ของเทคนิค Space Syntax (Hillier, Leaman, Stansall, & Bedford, 1976)
1.2) การวิเคราะห์โครงข่ายถนน
สำหรับบทความนี้จะแทนโครงข่ายถนนด้วยกราฟที่มีคุณสมบัติดังต่อไปนี้ (Boeing, 2017)
- Primal เนื่องจากกราฟแบบ primal สามาถเก็บข้อมูลทางภูมิศาสตร์และ ระยะทางซึ่งจำเป็นต่อการวิเคราะห์โครงข่ายถนน
- Non-planar เนื่องจากโครงข่ายถนนมีการเชื่อมโยงได้หลายระดับ เช่น ทางยกระดับ อุโมงค์ เป็นต้น
- Weighted เส้นเชื่อมสามารถมีค่าน้ำหนัก นำมาใช้แทนระยะทางระหว่างเมือง ความชัน เป็นต้น
- Multidigraph เป็นกราฟที่สามารถมีเส้นเชื่อมหลายเส้นระหว่างคู่จุดยอดสองจุดเดียวกัน และเส้นเชื่อมมีทิศทางกำกับ
- Self-loop กราฟมีเส้นเชื่อมที่เชื่อมจุดยอดเพียงจุดเดียวหรือวงวน
2) OSMnx สำหรับวิเคราะห์โครงข่ายถนน
เครื่องมือสำหรับวิเคราะห์โครงข่ายถนนที่ใช้ทั่วไปเช่น ArcGIS ที่มี Network Analyst extension, QGIS ซึ่งเป็น open-source มี plug-in ที่มีความสามารถจำกัด อย่างไรก็ดี เครื่องมือด้าน GIS ไม่สามารถนำมาใช้วิเคราะห์ปัญหาโครงข่ายบางอย่างได้ เช่น การหาวิถีสั้นสุด (shortest path) ในขณะที่ซอฟต์แวร์เพื่อการวิเคราะห์โครงข่ายเช่น Gephi, igraph และ graph-tool ไม่มีความสามารถการวิเคราะห์เชิงพื้นที่ (GIS) (Boeing, 2017)
Boeing (2017) ได้พัฒนาเครื่องมือชื่อ OSMnx ซึ่งเป็นแพ็กเกจไพทอนโอเพนซอร์สสำหรับดาวน์โหลดภาพขอบเขตการปกครอง (political/administrative boundary geometry) รูปร่างพื้นที่ฐานอาคาร (building footprint) และโครงข่ายถนนจาก OpenStreetMap OSMnx สามาถใช้เพื่อสร้าง แสดงภาพ วิเคราะห์โครงข่ายถนนแบบ non-planar โดยใช้คำสั่งภาษาไพทอน
การสร้างโครงข่ายถนนสามารถทำได้โดยสร้างคิวรี (query) ที่ระบุข้อมูลที่กำหนด
- ขอบเขตที่กำหนดโดยพิกัดเหนือใต้ตะวันออกตะวันตกที่สุด
- พิกัดภูมิศาสตร์และระยะทางจากพิกัดนั้นในหน่วยเมตร
- ที่อยู่และระยะทางจากที่อยู่นั้นในหน่วยเมตร
- รูปหลายเหลี่ยม (polygon)
- ชื่อสถานที่
นอกจากนี้ยังสามารถกำหนดได้ว่าต้องการให้เส้นเชื่อมของกราฟแทนสิ่งใดดังต่อไปนี้
- drive: ทางจราจรสาธารณะ (drivable public streets)
- drive_service: ทางจราจรสาธารณะและทางสำหรับยานพาหนะบริการ (drivable public streets including service roads)
- walk: ทางที่คนเดินเท้าใช้ได้ (เส้นเชื่อมนี้จะไม่คำนึงถึงทิศทางการเดินรถทางเดียว)
- bike: ทางที่รถจักรยานสามารถใช้ได้
- all: ทางสัญจรทุกชนิดที่เป็นทางสาธารณะ
- all_private:ทางสัญจรทุกชนิดรวมทั้งทางส่วนบุคคล
OSMnx สามารถใช้วิเคราะห์คุณสมบัติโครงข่ายดังแสดงในตารางด้านล่าง
n | จำนวนจุดยอดในโครงข่าย |
m | จำนวนเส้นเชื่อมในโครงข่าย (ถนนเดินรถสองทางนับเป็นสองเส้นเชื่อม) |
Average node degree | ค่าเฉลี่ยดีกรีของจุดยอดทั้งหมด |
Intersection count | จำนวนทางแยกในโครงข่าย (จำนวนจุดยอดที่มีถนนเชื่อม > 1) |
Average streets per node | ค่าเฉลี่ยจำนวนถนนที่เชื่อมกับแต่ละจุดยอด (รวมทางแยกและทางตัน) |
Counts of streets per node | Key = จำนวนถนนที่เชื่อมกับจุดยอด Value = จำนวนจุดยอดที่มีจำนวนถนนเชื่อมเท่ากับ key |
Proportions of streets per node | Key = จำนวนถนนที่เชื่อมกับจุดยอด Value = อัตราส่วนของจุดยอดที่มีจำนวนถนนเชื่อมเท่ากับ key |
Total edge length | ความยาวเส้นเชื่อมทั้งหมดในหน่วยเมตร (ถนนเดินรถสองทางนับเป็นสองเส้นเชื่อม) |
Average edge length | ความยาวเส้นเชื่อมเฉลี่ยในหน่วยเมตร |
Total street length | ความยาวถนนทั้งหมดในหน่วยเมตร |
Average street length | ความยาวถนนเฉลี่ยในหน่วยเมตร |
Count of street segment | จำนวนส่วนของถนน |
Node density | ความหนาแน่นจุดยอดต่อตารางกี่โลเมตร |
Intersection density | ความหนาแน่นทางแยกต่อตารางกิโลเมตร |
Edge density | ความยาวเส้นเชื่อมต่อตารางกี่โลเมตร |
Street density | ความยาวถนนต่อตารางกิโลเมตร |
Average circuity | ความเป็นวงจรเฉลี่ย คืออัตราส่วนระยะทางที่สั้นที่สุดระหว่างคู่จุดยอดบนโครงข่ายต่อระยะกระจัดระหว่างคู่จุดยอด ถ้าความเป็นวงจรมากแสดงว่าการเดินทางบนโครงข่ายอ้อมมาก ซึ่งส่งผลต่อประสิทธิภาพของโครงข่ายการเดินทาง |
Self-loop proportion | อัตราส่วนจุดยอดที่มีจุดเริ่มต้นและจุดปลายเป็นจุดเดียวกัน |
3) วิเคราะห์โครงข่ายถนนของกรุงเทพมหานคร สิงคโปร์ โตเกียว ลอนดอนและนิวยอร์ก
จากนั้นลองนำ OSMnx มาใช้ดาวน์โหลดและสร้างโครงข่ายถนนของเมืองดังนี้ กรุงเทพมหานคร สิงคโปร์ โตเกียว ลอนดอนและนิวยอร์กดังแสดงในภาพด้านล่าง
เมื่อใช้ OSMnx วิเคราะห์ข้อมูลของโครงข่ายถนนในเมืองได้ข้อมูลดังแสดงในตารางที่ 2
พบว่าโตเกียวมีความยาวถนนทั้งหมดมากที่สุดตามมาด้วยกรุงเทพมหานคร ลอนดอน นิวยอร์ค และสิงคโปร์ นอกจากนี้โตเกียวยังมีจำนวนทางแยกในโครงข่ายสูงที่สุดเท่ากับ 241,122 แยก ตามมาด้วยลอนดอน (93,263) กรุงเทพมหานคร (89,111) นิวยอร์ก (51,160) และสิงคโปร์ (19,907)
เนื่องจากโตเกียวมีจำนวนทางแยกสูง ทำให้มีความยาวช่วงถนนเฉลี่ยสั้นที่สุดเพียง 65.41 เมตร ตามมาด้วยลอนดอน (98.25) กรุงเทพมหานคร (102.30) นิวยอร์ก (123.02) และสิงคโปร์ (133.83)
| กรุงเทพฯ | สิงคโปร์ | โตเกียว | ลอนดอน | นิวยอร์ก |
จำนวนจุดยอดในโครงข่าย | 142,112 | 22,360 | 272,559 | 124,416 | 54,950 |
จำนวนเส้นเชื่อมในโครงข่าย | 314,505 | 43,352 | 739,421 | 294,319 | 140,790 |
ค่าเฉลี่ยดีกรีของจุดยอดทั้งหมด | 4.43 | 3.88 | 5.43 | 4.73 | 5.12 |
จำนวนทางแยกในโครงข่าย | 89,111 | 19,907 | 241,122 | 93,263 | 51,160 |
ค่าเฉลี่ยจำนวนถนนที่เชื่อมกับแต่ละจุดยอด (รวมทางแยกและทางตัน) | 2.35 | 2.99 | 2.96 | 2.56 | 3.33 |
ความยาวเส้นเชื่อมทั้งหมด (กิโลเมตร) | 31,059.18 | 5,745.13 | 47,294.49 | 28,981.01 | 16,479.34 |
ความยาวเส้นเชื่อมเฉลี่ย (เมตร) | 98.76 | 132.52 | 63.96 | 98.47 | 117.05 |
ความยาวถนนทั้งหมด (กิโลเมตร) | 17,062.78 | 4,475.93 | 26,390.55 | 15,710.49 | 11,243.38 |
ความยาวถนนเฉลี่ย (เมตร) | 102.30 | 133.83 | 65.41 | 98.25 | 123.02 |
จำนวนส่วนของถนน | 166,785 | 33,446 | 403,492 | 159,909 | 91,395 |
ความหนาแน่นจุดยอดต่อตารางกี่โลเมตร | 90.59 | 30.99 | 124.59 | 79.15 | 70.11 |
ความหนาแน่นทางแยกต่อตารางกิโลเมตร | 56.80 | 27.59 | 110.22 | 59.33 | 65.27 |
ความยาวเส้นเชื่อมต่อพื้นที่หนึ่งตารางกิโลเมตร (km/km2) | 19.80 | 7.96 | 21.62 | 18.44 | 21.02 |
ความยาวถนนต่อพื้นที่หนึ่งตารางกิโลเมตร (km/km2) | 10.88 | 6.20 | 12.06 | 9.99 | 14.34 |
ความเป็นวงจรเฉลี่ย | 1.0607 | 1.0850 | 1.0487 | 1.0599 | 1.0206 |
อัตราส่วนจุดยอดที่มีจุดเริ่มต้นและจุดปลายเป็นจุดเดียวกัน | 0.00166 | 0.00348 | 0.00062 | 0.00518 | 0.00106 |
นอกจากนี้เนื่องจากแต่ละเมืองมีขนาดพื้นที่แตกต่างกัน จึงนำพื้นที่เมืองมาใช้เพื่อคำนวณคุณสมบัติของโครงข่ายเพิ่มเติม
เมื่อคำนวณความหนาแน่นทางแยกพบว่าโตเกียวยังคงมีความหนาแน่นสูงที่สุดเท่ากับ 110.22 แยกต่อตารางกิโลเมตร ตามมาด้วยนิวยอร์ก (65.27) ลอนดอน (59.33) กรุงเทพมหานคร (56.80) และสิงคโปร์ (27.59)
จำนวนถนนที่เชื่อมกับแต่ละจุดยอดเฉลี่ยบ่งบอกว่าเมืองนั้นมีลักษณะทางแยกเป็นทางตัน สามแยกหรือสี่แยก หรืออื่น ๆ ได้ พบว่านิวยอร์กมีค่าจำนวนถนนที่เชื่อมกับแต่ละจุดยอดเฉลี่ยสูงสุดเท่ากับ 3.33 หรือเข้าใกล้สี่แยกมาก ตามมาด้วยสิงคโปร์ โตเกียว ลอนดอน และกรุงเทพมหานคร
สำหรับความเป็นวงจรเฉลี่ยนิวยอร์กมีความเป็นวงจรเฉลี่ยน้อยที่สุด สอดคล้องกับโครงข่ายถนนแบบตารางสี่เหลี่ยม ตามมาด้วยโตเกียว ลอนดอน กรุงเทพมหานครและสิงคโปร์
สรุป
OSMnx เหมาะสำหรับนำมาวิเคราะห์ข้อมูลโครงข่ายแผนที่ โดยอาศัยข้อมูลจาก Openstreetmap ซึ่งมีข้อมูลอยู่พอสมควรสำหรับเมืองใหญ่ ๆ และมีจุดเด่นคือไม่ว่าใครก็สามารถใช้งานได้ฟรี
อย่างไรก็ดี ข้อจำกัดของ OSMnx เช่น การใช้ OSMnx สร้างโครงข่ายถนนนั้นดาวน์โหลดข้อมูลถนนจาก Openstreetmap ซึ่งอาจมีข้อมูลไม่ตรงกับสภาพความเป็นจริงทั้งหมด ในการวิเคราะห์อย่างละเอียดเพื่อให้ผลการวิเคราะห์มีความน่าเชื่อถือมากขึ้นจำเป็นต้องมีการตรวจสอบข้อมูลโครงข่ายถนนก่อนนำมาใช้งาน
การใช้ OSMnx วิเคราะห์โครงข่ายถนนในกรุงเทพมหานครให้ถูกต้องมากขึ้นต้องมีการเขียนโปรแกรมปรับแต่งเพิ่มเติม เพื่อให้สะท้อนข้อบังคับจราจรบนถนนแต่ละเส้น เช่น การห้ามเลี้ยวขวา การห้ามกลับรถ ถนนที่อนุญาตให้เฉพาะรถประจำทางวิ่ง เป็นต้น เนื่องจากถนนในกรุงเทพมหานครโดยเฉพาะส่วนเมืองชั้นในมีการห้ามเลี้ยวขวา ห้ามกลับรถเป็นจำนวนมาก ส่งผลต่อระยะทางที่ใช้เดินทางจริงมากกว่าที่ปรากฏในการวิเคราะห์
ภาคผนวก
ตัวอย่างโค้ดที่ใช้สร้างโครงข่ายถนนและวิเคราะห์ข้อมูล
import networkx as nx
import osmnx as os
import requests
import matplotlib.cm as cm
import matplotlib.colors as colors
ox.config(use_cache=True, log_console=True)
# get a graph for the city
G = ox.graph_from_place('Bangkok, Thailand', network_type='drive')
fig, ax = ox.plot_graph(G, edge_linewidth=0.1, node_size=0)
ox.basic_stats(G_proj, area= 1568737000, clean_intersects=True, circuity_dist='euclidean')
เอกสารอ้างอิง
Boeing, G. (2017). OSMnx: New methods for acquiring, constructing, analyzing, and visualizing complex street networks. Computers, Environment and Urban Systems, 65, 126-139. https://doi.org/10.1016/j.compenvurbsys.2017.05.004.
Hillier, B., Leaman, A., Stansall, P., & Bedford, M. (1976). Space syntax. Environment and Planning B, 3(2), 147–185. http://dx.doi.org/10.1068/b030147.
Leave a Reply