0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OSMnx的TransCAD路網(wǎng)模型快速構(gòu)建

TransCAD和TransModeler交通軟件 ? 來源:TransCAD和TransModeler交通軟件 ? 2025-01-03 10:33 ? 次閱讀

開源數(shù)據(jù)對交通模型貢獻與日俱增。就道路網(wǎng)絡建模而言,隨著數(shù)據(jù)質(zhì)量的提升,開源OpenStreetMap矢量數(shù)據(jù)已經(jīng)具備較強的可用性。首先,OpenStreetMap矢量數(shù)據(jù)更新速度較快,且具備較為準確的幾何線形信息,自帶路名、路名和等級等信息,使其具備了較好的基本條件;其次,采用通用的WGS84坐標系,可以更方便的與其它開源數(shù)據(jù)源協(xié)同利用。不過,OpenStreetMap矢量數(shù)據(jù)文件是xml格式,直接用于建模也存在不同程度的障礙,尤其是網(wǎng)絡拓撲存在普遍的問題。本文探討基于Python + OSMnx軟件包的OpenStreetMap矢量數(shù)據(jù)在TransCAD交通規(guī)劃模型軟件中的路網(wǎng)建模方法,發(fā)掘開源數(shù)據(jù)利用新路徑。

1 OSMnx簡介及路網(wǎng)數(shù)據(jù)提取方法

1.1 OSMnx簡介及安裝

OSMnx 是南加州大學的Geoff Boeing助理教授開發(fā)的一個 Python 軟件包,可以用于從OpenStreetMap下載、拓撲處理、分析和可視化街道網(wǎng)絡和其他地理要素。只需一行代碼,就能下載步行、駕車或騎車網(wǎng)絡并建立模型,然后對其進行分析和可視化。OSMnx還可以輕松處理城市設(shè)施/興趣點、建筑占地面積、公交站點、高程數(shù)據(jù)、街道方向、速度/旅行時間和路線。本文著重介紹怎樣基于OSMnx構(gòu)造交通模型的道路網(wǎng)絡,關(guān)于其它功能詳見OSMnx官網(wǎng)。

OSMnx的安裝方法之一是可以在Anaconda環(huán)境下運行以下命令:

conda create -n ox -c conda-forge --strict-channel-priority osmnx

Anaconda是一個功能強大的數(shù)據(jù)科學平臺,可安裝、管理Python相關(guān)包的軟件,自帶Python、Jupyter Notebook、Spyder等工具。其自帶Python解釋器,用戶可以方便地進行Python編程。當然,也可以使用pip安裝,不過Anaconda軟件安裝說明文檔提示這不屬于官方支持做法。

1.2 OSMnx在線路網(wǎng)下載和拓撲處理

OSMnx 提供5種方式下載在線路網(wǎng),本文主要介紹多邊形面域和矩形框兩種,其他具體詳見使用手冊的函數(shù)參數(shù)說明。

序號 方式 函數(shù)
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文件作為邊界。以下以北京海淀區(qū)范圍為例演示通過多邊形面域構(gòu)建圖網(wǎng)絡。

6aabce50-c84d-11ef-9310-92fbcf53809c.png

6af273e6-c84d-11ef-9310-92fbcf53809c.png

6b2a12f6-c84d-11ef-9310-92fbcf53809c.png

6b535c2e-c84d-11ef-9310-92fbcf53809c.png

注意運行以上操作需要有對國外網(wǎng)站的訪問權(quán)限,生成的gpkg文件是GeoPackage的文件格式,可以用QGIS打開看到包含edges和nodes兩個圖層,分別對應線層和點層。將這兩個圖層分別導出為shp文件,即可作為TransCAD建模的路網(wǎng)輸入文件。

6b6bceee-c84d-11ef-9310-92fbcf53809c.png

需要說明的是面域文件可以使用外部讀入權(quán)威的shp文件替代,考慮到OpenStreetMap自帶行政邊界缺少權(quán)威性,建議使用自定義邊界以避免產(chǎn)生不必要的爭議。

6b8f135e-c84d-11ef-9310-92fbcf53809c.png

(2)矩形框graph_from_bbox()

矩形框操作和多邊形面域類似,使用graph_from_bbox()函數(shù),通過元組數(shù)據(jù)指定邊界范圍即可,使用海淀區(qū)的坐標范圍所得小汽車網(wǎng)絡見下圖。

6bad1bf6-c84d-11ef-9310-92fbcf53809c.png

1.3 離線osm文件的獲取、切割和OSMnx拓撲處理

OSMnx還提供基于osm文件的離線建模方式,不受網(wǎng)絡下載的限制。但一般而言可直接獲取的數(shù)據(jù)是一個包含全中國的范圍的osm文件,數(shù)據(jù)量很大。因此在使用前需要對osm文件根據(jù)需要的范圍進行切割。

(1)OSM文件下載

通過https://download.geofabrik.de/網(wǎng)站,可以下載全國的osm文件,點擊Asia然后選擇子區(qū)域中的China。原始文件大小約2G,解壓縮后約22.6G。

6c0b4cf8-c84d-11ef-9310-92fbcf53809c.png

6c2f6fb6-c84d-11ef-9310-92fbcf53809c.png

(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同樣提供矩形框和面域兩種形式。對于矩形框而言操作較為簡單,以前文的北京市海淀區(qū)為例,其命令為:

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需要設(shè)置為true,否則OSMnx在讀入文件構(gòu)建圖網(wǎng)絡時會提示節(jié)點信息不完整出錯。

osmosis同樣提供面域切割的模式,面域文件后綴為“.poly”。根據(jù)shp文件生成“.poly”建議使用QGIS的插件osmploy_export。安裝完成后,選擇面域,點擊菜單圖標6c565ae0-c84d-11ef-9310-92fbcf53809c.png,指定字段作為面域名稱即可生成“.poly”文件。注意面域需要包含字符型字段才可以作為面域“.poly”文件的面域標簽。

6c6e2ab2-c84d-11ef-9310-92fbcf53809c.png

基于面域“.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文件拓撲處理過程如下:

6c891f3e-c84d-11ef-9310-92fbcf53809c.png

從上圖不難發(fā)現(xiàn)離線osm文件的要素遠比直接在線地圖建模的內(nèi)容要豐富,主要是因為前文在線地圖中只包含小汽車通行的網(wǎng)絡,而在離線osm建模結(jié)果包含了鐵路、地鐵、小汽車、步行等所有網(wǎng)絡信息。相對在線下載的osm文件,遺憾的是未能在離線osm文件找到通行權(quán)選擇集參數(shù)。因此如采用離線osm文件得到的結(jié)果作為后續(xù)交通模型輸入需要通過選擇集做進一步篩選和清洗。

上圖為多邊形切割后的建模結(jié)果,網(wǎng)絡冗余明顯減少。因此,考慮后續(xù)處理的工作量,建議采用多邊形切割代替矩形框。

2 基于OSMnx數(shù)據(jù)的TransCAD路網(wǎng)建模

2.1 gpkg數(shù)據(jù)導出

OSMnx生成的圖網(wǎng)絡保存gpkg,對應生成edges和nodes兩個圖層。gpkg文件可以直接用QGIS打開,分別將這兩個文件導出保存為shp備用。為了防止shp文件中文字段的亂碼,需要針對不同的TransCAD版本選擇不同編碼方式,下面的例子是選擇UTF-8編碼方式。順便說一下,使用QGIS保存shp文件為不同編碼方式,可以解決TransCAD早期版本對一些特定編碼的shp文件顯示為亂碼的問題。

6cd8aa68-c84d-11ef-9310-92fbcf53809c.png

6cf602f2-c84d-11ef-9310-92fbcf53809c.png

2.2 shp文件導入TransCAD

TransCAD支持帶有拓撲關(guān)系的點和線兩個圖層同時導入,也支持雙向的道路雙線要素格式轉(zhuǎn)換為單線要素格式,并用AB/BA字段表示雙向的不同屬性,較為靈活。參見:TransCAD導入常用交通規(guī)劃軟件網(wǎng)絡數(shù)據(jù)。

在TransCAD通過File菜單,Open找到edges.shp文件,并按下圖設(shè)置(包括nodes.shp文件),待完成后即可生成TransCAD模型路網(wǎng)。

6d136360-c84d-11ef-9310-92fbcf53809c.png

6d2d93fc-c84d-11ef-9310-92fbcf53809c.png

6d3d8bf4-c84d-11ef-9310-92fbcf53809c.png

不難發(fā)現(xiàn),導入后的網(wǎng)絡link屬性中路名、道路等級等屬性比較完整,但車道數(shù)、自由流車速等指標存在缺失。這是由于OpenStreetMap地圖數(shù)據(jù)本身的缺陷。要用于交通模型,還需要通過標準化屬性賦值來彌補這一缺陷的方法。下面介紹標準化屬性賦值方法。

2.3 道路屬性配置

考慮OpenStreetMap數(shù)據(jù)車道和自由流車速缺失的問題。經(jīng)對osm地圖數(shù)據(jù)的梳理,發(fā)現(xiàn)車行道的linktype約有89種。結(jié)合道路等級和連接屬性,進一步分成22類,分別對于每一類道路的車道數(shù)和自由流車速進行初始化。相關(guān)參數(shù)見下表。

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之前完成數(shù)值初始化,這樣雙向的屬性更容易一次性操作。

3結(jié)語

總體來說通過OpenStreetMap來構(gòu)建交通模型網(wǎng)絡雖然還存在一定缺陷,特別是道路等級、車道數(shù)和自由流車速的問題。但無疑這是一種高效的交通網(wǎng)絡建模方法,再配合公交模型數(shù)據(jù)庫自動創(chuàng)建工具,能夠快速完成基礎(chǔ)交通網(wǎng)絡模型的開發(fā),是一種值得推廣的工作模式。當然,網(wǎng)絡數(shù)據(jù)的可靠性對模型的精度也會有直接的影響,在條件允許的情形下,其他高質(zhì)量的輸入數(shù)據(jù)仍然是交通建模的首選(例如導航地圖矢量數(shù)據(jù))。

OSMnx不僅可以作為道路網(wǎng)絡的建模工具,還有其他一些重要的功能,包括k最短路分析、距離計算等。這些功能具有廣泛的應用場景。騎行、步行網(wǎng)絡也能夠直接支持開展城市騎行和步行網(wǎng)絡的研究工作。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 交通網(wǎng)絡
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7048
  • 路網(wǎng)
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6599

原文標題:基于OSMnx的TransCAD路網(wǎng)模型快速構(gòu)建

文章出處:【微信號:TransCADTransModeler,微信公眾號:TransCAD和TransModeler交通軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    小白學大模型構(gòu)建LLM的關(guān)鍵步驟

    隨著大規(guī)模語言模型(LLM)在性能、成本和應用前景上的快速發(fā)展,越來越多的團隊開始探索如何自主訓練LLM模型。然而,是否從零開始訓練一個LLM,并非每個組織都適合。本文將根據(jù)不同的需求與資源,幫助
    的頭像 發(fā)表于 01-09 12:12 ?308次閱讀
    小白學大<b class='flag-5'>模型</b>:<b class='flag-5'>構(gòu)建</b>LLM的關(guān)鍵步驟

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡模型

    構(gòu)建一個LSTM(長短期記憶)神經(jīng)網(wǎng)絡模型是一個涉及多個步驟的過程。以下是使用Python和Keras庫構(gòu)建LSTM模型的指南。 1. 安裝必要的庫 首先,確保你已經(jīng)安裝了Python
    的頭像 發(fā)表于 11-13 10:10 ?503次閱讀

    為THS3001構(gòu)建一個簡單的SPICE模型

    電子發(fā)燒友網(wǎng)站提供《為THS3001構(gòu)建一個簡單的SPICE模型.pdf》資料免費下載
    發(fā)表于 10-29 10:11 ?1次下載
    為THS3001<b class='flag-5'>構(gòu)建</b>一個簡單的SPICE<b class='flag-5'>模型</b>

    快速部署Tensorflow和TFLITE模型在Jacinto7 Soc

    電子發(fā)燒友網(wǎng)站提供《快速部署Tensorflow和TFLITE模型在Jacinto7 Soc.pdf》資料免費下載
    發(fā)表于 09-27 11:41 ?0次下載
    <b class='flag-5'>快速</b>部署Tensorflow和TFLITE<b class='flag-5'>模型</b>在Jacinto7 Soc

    【飛凌嵌入式OK3576-C開發(fā)板體驗】rkllm模型量化構(gòu)建

    (model = modelpath) if ret != 0: print(\'Load model failed!\') exit(ret) 模型量化構(gòu)建 # Build model ret
    發(fā)表于 08-27 22:50

    什么是大模型?快速了解大模型基本概念

    “在人工智能的世界里,大模型就像超級大腦一樣,能夠處理和理解大量的信息。你可能聽說過ChatGPT,它就是大模型的一個典型代表。那么,什么是大模型呢?讓我們一起來探索這個神奇的領(lǐng)域。什么是大
    的頭像 發(fā)表于 08-07 08:28 ?1657次閱讀
    什么是大<b class='flag-5'>模型</b>?<b class='flag-5'>快速</b>了解大<b class='flag-5'>模型</b>基本概念

    如何構(gòu)建多層神經(jīng)網(wǎng)絡

    構(gòu)建多層神經(jīng)網(wǎng)絡(MLP, Multi-Layer Perceptron)模型是一個在機器學習和深度學習領(lǐng)域廣泛使用的技術(shù),尤其在處理分類和回歸問題時。在本文中,我們將深入探討如何從頭開始構(gòu)建一個多層神經(jīng)網(wǎng)絡
    的頭像 發(fā)表于 07-19 17:19 ?963次閱讀

    PyTorch神經(jīng)網(wǎng)絡模型構(gòu)建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發(fā)者構(gòu)建、訓練和部署神經(jīng)網(wǎng)絡模型。在神經(jīng)網(wǎng)絡模型中,輸出層是尤為關(guān)鍵的部分,它負責將模型的預測結(jié)果以合適
    的頭像 發(fā)表于 07-10 14:57 ?534次閱讀

    神經(jīng)網(wǎng)絡預測模型構(gòu)建方法

    神經(jīng)網(wǎng)絡模型作為一種強大的預測工具,廣泛應用于各種領(lǐng)域,如金融、醫(yī)療、交通等。本文將詳細介紹神經(jīng)網(wǎng)絡預測模型構(gòu)建方法,包括模型設(shè)計、數(shù)據(jù)集準備、
    的頭像 發(fā)表于 07-05 17:41 ?758次閱讀

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 Keras和TensorFlow簡介 Keras是一個高級神經(jīng)網(wǎng)絡API,它提供了一種簡單、快速的方式來構(gòu)建
    的頭像 發(fā)表于 07-05 09:36 ?574次閱讀

    如何在TensorFlow中構(gòu)建并訓練CNN模型

    在TensorFlow中構(gòu)建并訓練一個卷積神經(jīng)網(wǎng)絡(CNN)模型是一個涉及多個步驟的過程,包括數(shù)據(jù)預處理、模型設(shè)計、編譯、訓練以及評估。下面,我將詳細闡述這些步驟,并附上一個完整的代碼示例。
    的頭像 發(fā)表于 07-04 11:47 ?1023次閱讀

    基于神經(jīng)網(wǎng)絡算法的模型構(gòu)建方法

    神經(jīng)網(wǎng)絡是一種強大的機器學習算法,廣泛應用于各種領(lǐng)域,如圖像識別、自然語言處理、語音識別等。本文詳細介紹了基于神經(jīng)網(wǎng)絡算法的模型構(gòu)建方法,包括數(shù)據(jù)預處理、網(wǎng)絡結(jié)構(gòu)設(shè)計、訓練過程優(yōu)化、模型評估
    的頭像 發(fā)表于 07-02 11:21 ?618次閱讀

    請問NanoEdge AI數(shù)據(jù)集該如何構(gòu)建?

    我想用NanoEdge來識別異常的聲音,但我目前沒有辦法生成模型,我感覺可能是數(shù)據(jù)集的問題,請問我該怎么構(gòu)建數(shù)據(jù)集?或者生成模型失敗還會有哪些原因?
    發(fā)表于 05-28 07:27

    中國鐵路網(wǎng)的Dijkstra算法實現(xiàn)案例

    該項目分別在DE1-SOC開發(fā)板的FPGA和HPS上實現(xiàn)了Dijkstra算法,能在中國鐵路網(wǎng)中找到兩站之間的最短距離和路線。
    的頭像 發(fā)表于 04-09 11:10 ?640次閱讀
    中國鐵<b class='flag-5'>路網(wǎng)</b>的Dijkstra算法實現(xiàn)案例

    名單公布!【書籍評測活動NO.30】大規(guī)模語言模型:從理論到實踐

    。 為了使更多的自然語言處理研究人員和對大語言模型感興趣的讀者能夠快速了解大模型的理論基礎(chǔ),并開展大模型實踐,復旦大學張奇教授團隊結(jié)合他們在自然語言處理領(lǐng)域的研究經(jīng)驗,以及分布式系統(tǒng)和
    發(fā)表于 03-11 15:16