開源數據對交通模型貢獻與日俱增。就道路網絡建模而言,隨著數據質量的提升,開源OpenStreetMap矢量數據已經具備較強的可用性。首先,OpenStreetMap矢量數據更新速度較快,且具備較為準確的幾何線形信息,自帶路名、路名和等級等信息,使其具備了較好的基本條件;其次,采用通用的WGS84坐標系,可以更方便的與其它開源數據源協同利用。不過,OpenStreetMap矢量數據文件是xml格式,直接用于建模也存在不同程度的障礙,尤其是網絡拓撲存在普遍的問題。本文探討基于Python + OSMnx軟件包的OpenStreetMap矢量數據在TransCAD交通規劃模型軟件中的路網建模方法,發掘開源數據利用新路徑。
1 OSMnx簡介及路網數據提取方法
1.1 OSMnx簡介及安裝
OSMnx 是南加州大學的Geoff Boeing助理教授開發的一個 Python 軟件包,可以用于從OpenStreetMap下載、拓撲處理、分析和可視化街道網絡和其他地理要素。只需一行代碼,就能下載步行、駕車或騎車網絡并建立模型,然后對其進行分析和可視化。OSMnx還可以輕松處理城市設施/興趣點、建筑占地面積、公交站點、高程數據、街道方向、速度/旅行時間和路線。本文著重介紹怎樣基于OSMnx構造交通模型的道路網絡,關于其它功能詳見OSMnx官網。
OSMnx的安裝方法之一是可以在Anaconda環境下運行以下命令:
conda create -n ox -c conda-forge --strict-channel-priority osmnx
Anaconda是一個功能強大的數據科學平臺,可安裝、管理Python相關包的軟件,自帶Python、Jupyter Notebook、Spyder等工具。其自帶Python解釋器,用戶可以方便地進行Python編程。當然,也可以使用pip安裝,不過Anaconda軟件安裝說明文檔提示這不屬于官方支持做法。
1.2 OSMnx在線路網下載和拓撲處理
OSMnx 提供5種方式下載在線路網,本文主要介紹多邊形面域和矩形框兩種,其他具體詳見使用手冊的函數參數說明。
序號 | 方式 | 函數 |
1 | 地址 | graph_from_address() |
2 | 矩形框 | graph_from_bbox() |
3 | 位置 | graph_from_place() |
4 | 坐標點 | graph_from_point() |
5 | 多邊形 | graph_from_polygon() |
(1)多邊形面域graph_from_polygon()
OSMnx可以獲取OpenStreetMap自帶的行政邊界,用作選擇范圍的面域。當然,也可以通過外部讀入面域圖形的shp文件作為邊界。以下以北京海淀區范圍為例演示通過多邊形面域構建圖網絡。
注意運行以上操作需要有對國外網站的訪問權限,生成的gpkg文件是GeoPackage的文件格式,可以用QGIS打開看到包含edges和nodes兩個圖層,分別對應線層和點層。將這兩個圖層分別導出為shp文件,即可作為TransCAD建模的路網輸入文件。
需要說明的是面域文件可以使用外部讀入權威的shp文件替代,考慮到OpenStreetMap自帶行政邊界缺少權威性,建議使用自定義邊界以避免產生不必要的爭議。
(2)矩形框graph_from_bbox()
矩形框操作和多邊形面域類似,使用graph_from_bbox()函數,通過元組數據指定邊界范圍即可,使用海淀區的坐標范圍所得小汽車網絡見下圖。
1.3 離線osm文件的獲取、切割和OSMnx拓撲處理
OSMnx還提供基于osm文件的離線建模方式,不受網絡下載的限制。但一般而言可直接獲取的數據是一個包含全中國的范圍的osm文件,數據量很大。因此在使用前需要對osm文件根據需要的范圍進行切割。
(1)OSM文件下載
通過https://download.geofabrik.de/網站,可以下載全國的osm文件,點擊Asia然后選擇子區域中的China。原始文件大小約2G,解壓縮后約22.6G。
(2)使用osmosis工具切割OSM文件
切割OSM文件需要用到osmosis工具。osmosis是一個基于Java的開源osm文件切割工具,當前最新版為0.49.2,下載鏈接:
https://github.com/openstreetmap/osmosis/releases/download/0.49.2/osmosis-0.49.2.zip
osmosis切割osm同樣提供矩形框和面域兩種形式。對于矩形框而言操作較為簡單,以前文的北京市海淀區為例,其命令為:
osmosis--read-xml file=f:china-latest_20240518.osm --bounding-boxtop="40.173" left="116.059" bottom="39.871"right="116.398" clipIncompleteEntities=true--wx file=f:haidian.osm
通過上下左右的坐標來指定矩形范圍,特別需要注意的是clipIncompleteEntities需要設置為true,否則OSMnx在讀入文件構建圖網絡時會提示節點信息不完整出錯。
osmosis同樣提供面域切割的模式,面域文件后綴為“.poly”。根據shp文件生成“.poly”建議使用QGIS的插件osmploy_export。安裝完成后,選擇面域,點擊菜單圖標,指定字段作為面域名稱即可生成“.poly”文件。注意面域需要包含字符型字段才可以作為面域“.poly”文件的面域標簽。
基于面域“.poly”文件的osm文件切割命令如下:
osmosis--read-xml file=f:china-latest_20240518.osm --bounding-polygonfile="f:Haidian.poly" clipIncompleteEntities=true --wxfile=f:Haidian_poly.osm
(3)離線osm文件拓撲處理
使用OSMnx對離線osm文件拓撲處理過程如下:
從上圖不難發現離線osm文件的要素遠比直接在線地圖建模的內容要豐富,主要是因為前文在線地圖中只包含小汽車通行的網絡,而在離線osm建模結果包含了鐵路、地鐵、小汽車、步行等所有網絡信息。相對在線下載的osm文件,遺憾的是未能在離線osm文件找到通行權選擇集參數。因此如采用離線osm文件得到的結果作為后續交通模型輸入需要通過選擇集做進一步篩選和清洗。
上圖為多邊形切割后的建模結果,網絡冗余明顯減少。因此,考慮后續處理的工作量,建議采用多邊形切割代替矩形框。
2 基于OSMnx數據的TransCAD路網建模
2.1 gpkg數據導出
OSMnx生成的圖網絡保存gpkg,對應生成edges和nodes兩個圖層。gpkg文件可以直接用QGIS打開,分別將這兩個文件導出保存為shp備用。為了防止shp文件中文字段的亂碼,需要針對不同的TransCAD版本選擇不同編碼方式,下面的例子是選擇UTF-8編碼方式。順便說一下,使用QGIS保存shp文件為不同編碼方式,可以解決TransCAD早期版本對一些特定編碼的shp文件顯示為亂碼的問題。
2.2 shp文件導入TransCAD
TransCAD支持帶有拓撲關系的點和線兩個圖層同時導入,也支持雙向的道路雙線要素格式轉換為單線要素格式,并用AB/BA字段表示雙向的不同屬性,較為靈活。參見:TransCAD導入常用交通規劃軟件網絡數據。
在TransCAD通過File菜單,Open找到edges.shp文件,并按下圖設置(包括nodes.shp文件),待完成后即可生成TransCAD模型路網。
不難發現,導入后的網絡link屬性中路名、道路等級等屬性比較完整,但車道數、自由流車速等指標存在缺失。這是由于OpenStreetMap地圖數據本身的缺陷。要用于交通模型,還需要通過標準化屬性賦值來彌補這一缺陷的方法。下面介紹標準化屬性賦值方法。
2.3 道路屬性配置
考慮OpenStreetMap數據車道和自由流車速缺失的問題。經對osm地圖數據的梳理,發現車行道的linktype約有89種。結合道路等級和連接屬性,進一步分成22類,分別對于每一類道路的車道數和自由流車速進行初始化。相關參數見下表。
NO | linktype | type | lanes | speed |
1 | motorway | 1 | 3 | 120 |
2 | trunk | 2 | 4 | 70 |
3 | primary | 3 | 3 | 50 |
4 | secondary | 4 | 2 | 40 |
5 | tertiary | 5 | 1 | 30 |
6 | residential | 6 | 1 | 20 |
7 | living_street | 7 | 1 | 15 |
8 | road | 8 | 1 | 20 |
9 | unclassified | 8 | 1 | 20 |
10 | busway | 9 | 1 | 40 |
11 | escape | 10 | 1 | 10 |
12 | motorway_link | 11 | 2 | 60 |
13 | trunk_link | 12 | 2 | 40 |
14 | primary_link | 13 | 1 | 30 |
15 | secondary_link | 14 | 1 | 25 |
16 | tertiary_link | 15 | 1 | 20 |
17 | ['motorway', 'motorway_link'] | 21 | 1 | 30 |
18 | ['motorway_link', 'motorway'] | 21 | 1 | 30 |
19 | ['primary', 'motorway'] | 21 | 1 | 30 |
20 | ['secondary', 'motorway'] | 21 | 1 | 30 |
21 | ['trunk', 'motorway'] | 21 | 1 | 25 |
22 | ['trunk_link', 'motorway'] | 21 | 1 | 25 |
23 | ['motorway_link', 'primary_link'] | 22 | 1 | 25 |
24 | ['motorway_link', 'tertiary'] | 22 | 1 | 25 |
25 | ['motorway_link', 'unclassified'] | 22 | 1 | 25 |
26 | ['primary', 'motorway_link'] | 22 | 1 | 25 |
27 | ['residential', 'motorway_link'] | 22 | 1 | 25 |
28 | ['secondary', 'motorway_link'] | 22 | 1 | 25 |
29 | ['secondary_link', 'motorway_link'] | 22 | 1 | 25 |
30 | ['tertiary_link', 'motorway_link', 'tertiary'] | 22 | 1 | 25 |
31 | ['tertiary_link', 'motorway_link'] | 22 | 1 | 25 |
32 | ['trunk', 'motorway_link'] | 22 | 1 | 25 |
33 | ['trunk_link', 'motorway_link'] | 22 | 1 | 25 |
34 | ['unclassified', 'motorway_link'] | 22 | 1 | 25 |
35 | ['primary', 'trunk', 'primary_link'] | 23 | 1 | 20 |
36 | ['primary', 'trunk'] | 23 | 1 | 20 |
37 | ['secondary', 'secondary_link', 'trunk'] | 23 | 1 | 20 |
38 | ['secondary', 'trunk', 'trunk_link', 'unclassified'] | 23 | 1 | 20 |
39 | ['secondary', 'trunk'] | 23 | 1 | 20 |
40 | ['secondary_link', 'trunk', 'secondary'] | 23 | 1 | 20 |
41 | ['secondary_link', 'trunk'] | 23 | 1 | 20 |
42 | ['trunk', 'primary_link'] | 23 | 1 | 20 |
43 | ['trunk', 'tertiary'] | 23 | 1 | 20 |
44 | ['trunk', 'trunk_link'] | 23 | 1 | 20 |
45 | ['primary', 'trunk_link'] | 24 | 1 | 20 |
46 | ['residential', 'trunk_link'] | 24 | 1 | 20 |
47 | ['secondary', 'trunk_link'] | 24 | 1 | 20 |
48 | ['secondary_link', 'trunk_link'] | 24 | 1 | 20 |
49 | ['trunk_link', 'primary_link'] | 24 | 1 | 20 |
50 | ['trunk_link', 'tertiary'] | 24 | 1 | 20 |
51 | ['trunk_link', 'unclassified'] | 24 | 1 | 20 |
52 | ['primary', 'primary_link'] | 25 | 1 | 20 |
53 | ['primary', 'tertiary'] | 25 | 1 | 20 |
54 | ['primary', 'tertiary_link'] | 25 | 1 | 20 |
55 | ['primary_link', 'tertiary'] | 25 | 1 | 20 |
56 | ['residential', 'primary'] | 25 | 1 | 20 |
57 | ['residential', 'primary_link'] | 25 | 1 | 20 |
58 | ['secondary', 'primary', 'tertiary'] | 25 | 1 | 20 |
59 | ['secondary', 'primary'] | 25 | 1 | 20 |
60 | ['secondary', 'primary_link'] | 25 | 1 | 20 |
61 | ['tertiary', 'primary_link'] | 25 | 1 | 20 |
62 | ['unclassified', 'primary_link'] | 25 | 1 | 20 |
63 | ['residential', 'secondary'] | 26 | 1 | 15 |
64 | ['secondary', 'living_street'] | 26 | 1 | 15 |
65 | ['secondary', 'secondary_link'] | 26 | 1 | 15 |
66 | ['secondary', 'tertiary'] | 26 | 1 | 15 |
67 | ['secondary', 'tertiary_link', 'tertiary'] | 26 | 1 | 15 |
68 | ['secondary', 'tertiary_link'] | 26 | 1 | 15 |
69 | ['secondary', 'unclassified'] | 26 | 1 | 15 |
70 | ['secondary_link', 'secondary', 'tertiary'] | 26 | 1 | 15 |
71 | ['secondary_link', 'secondary'] | 26 | 1 | 15 |
72 | ['secondary_link', 'tertiary'] | 26 | 1 | 15 |
73 | ['secondary_link', 'tertiary_link', 'tertiary'] | 26 | 1 | 15 |
74 | ['secondary_link', 'tertiary_link'] | 26 | 1 | 15 |
75 | ['secondary_link', 'unclassified'] | 26 | 1 | 15 |
76 | ['living_street', 'tertiary'] | 27 | 1 | 15 |
77 | ['living_street', 'unclassified'] | 27 | 1 | 15 |
78 | ['residential', 'living_street', 'unclassified'] | 27 | 1 | 15 |
79 | ['residential', 'living_street'] | 27 | 1 | 15 |
80 | ['residential', 'road'] | 27 | 1 | 15 |
81 | ['residential', 'tertiary'] | 27 | 1 | 15 |
82 | ['residential', 'tertiary_link'] | 27 | 1 | 15 |
83 | ['residential', 'unclassified', 'tertiary'] | 27 | 1 | 15 |
84 | ['residential', 'unclassified'] | 27 | 1 | 15 |
85 | ['road', 'residential'] | 27 | 1 | 15 |
86 | ['road', 'unclassified'] | 27 | 1 | 15 |
87 | ['tertiary_link', 'tertiary'] | 27 | 1 | 15 |
88 | ['tertiary_link', 'unclassified'] | 27 | 1 | 15 |
89 | ['unclassified', 'tertiary'] | 27 | 1 | 15 |
建議在shp文件導入TransCAD之前完成數值初始化,這樣雙向的屬性更容易一次性操作。
3結語
總體來說通過OpenStreetMap來構建交通模型網絡雖然還存在一定缺陷,特別是道路等級、車道數和自由流車速的問題。但無疑這是一種高效的交通網絡建模方法,再配合公交模型數據庫自動創建工具,能夠快速完成基礎交通網絡模型的開發,是一種值得推廣的工作模式。當然,網絡數據的可靠性對模型的精度也會有直接的影響,在條件允許的情形下,其他高質量的輸入數據仍然是交通建模的首選(例如導航地圖矢量數據)。
OSMnx不僅可以作為道路網絡的建模工具,還有其他一些重要的功能,包括k最短路分析、距離計算等。這些功能具有廣泛的應用場景。騎行、步行網絡也能夠直接支持開展城市騎行和步行網絡的研究工作。
-
交通網絡
+關注
關注
0文章
9瀏覽量
7040 -
路網
+關注
關注
0文章
8瀏覽量
6598
原文標題:基于OSMnx的TransCAD路網模型快速構建
文章出處:【微信號:TransCADTransModeler,微信公眾號:TransCAD和TransModeler交通軟件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論