前言
要對目前已有道路及規划防火道路與火點進行最佳路徑分析,分析由各最近駐防點到火點的最優路徑,求算到達火點最短平均時間。這里采取分離行車和步行的方法,分別計算最短車行和步行平均距離,進而根據速度確定最短平均時間。
注意:ArcMap需要有Network Analyst擴展的授權許可。
數據准備
駐防點
因對路網進行分析,則駐防點各點需位於路網上,使用近鄰分析工具,勾選位置,可獲得其最近路網點坐標(NEAR_X和NEAR_Y)和最短距離(NEAR_DIST)。
將表導出為dbf——添加X、Y數據——導出數據為駐防點最近路網點.shp
火點
同駐防點處理。
路網
網絡數據集的默認連通性設置僅在線要素的重合端點處建立連通性。
這就需要在路網各交點處打斷,同時在與起始點和目的點相交處也要打斷(保證分析可以在岔路處分支,在起止點停止)。
使用要素轉線工具在交點處打斷線,使用在點處分割線工具在與起始點和目的點相交處打斷。
還要保證不能有懸掛點和偽節點,懸掛點(Dangle Node,Dangle):線段的端點懸空,沒有和其他結點連接,這個結點(端點)稱為懸結點。偽結點(Pseudo Node):兩個結點相互接觸,連接成一個結點,稱為偽結點。
由此可見,懸掛點是不通的,偽節點是一條線路上兩個節點的重合,也可以合並成一條線路。可使用拓撲檢查並修改,設置規則:不能有懸掛點、不能有偽節點。
實現原理
OD成本矩陣
Origin-Destination(起始點—目的點)
解釋下什么叫OD成本矩陣?
舉個例子:從A、B到C、D,要求算兩兩之間的通行時間,情況就四種A—C,A—D,B—C,B—D。對於少數情況人工就可以分析,若有100個起始點,100個目的點,就有100*100種組合,這種組合就叫OD成本矩陣。
OD 成本矩陣用於查找和測量網絡中從多個起始點到多個目的地的最小成本路徑。配置 OD 成本矩陣分析時,可以指定要查找的目的地數和要搜索的最大距離。
OD 成本矩陣求解程序不輸出沿網絡(路網)的線,但是存儲在“線”屬性表中的值卻反映了網絡距離,而不是直線距離。
上面簡單來理解就是,OD 成本矩陣求解結果是連接起始點和目的點的直線,但其距離屬性為沿路網距離,OD成本矩陣的主要關注點是矩陣而非實際路徑。
若想獲得起始點到目的點真實路徑,可使用路徑分析。
路徑分析
求解路徑分析表示根據要求的阻抗查找最快、最短甚至是最優的路徑。如果阻抗是時間,則最佳路線即為最快路線。如果阻抗是具有實時或歷史流量的時間屬性,則最佳路線是對指定日期和時間來說最快的路線。因此,可將最佳路徑定義為阻抗最低或成本最低的路徑,其中,阻抗由您來選擇。確定最佳路徑時,所有成本屬性均可用作阻抗。
這里只做粗略分析,不考慮阻抗因素。
若只有較少起止點,可直接使用Network Analyst工具欄上的創建網絡位置按鈕。當存在多組時,可對停靠點分組,每組指定相同的名稱(RouteName字段),並指定停靠點的Sequence屬性(起點設置1,終點設置2)。
操作步驟
創建要素數據集
創建文件地理數據庫——創建要素數據集(坐標與路網圖層一致)——將路網要素導入要素數據集
創建網絡數據集
這里不考慮高程和行駛方向,假設道路不存在立交和單行道(事實也基本如此)。
OD成本矩陣
創建OD成本矩陣圖層
加載起始點和目的地點
打開Network Analyst窗口,加載起始點和目的地點(右鍵加載位置),因未指定各火點對應的駐防點,這里默認火點最近駐防點作為負責單位,上面創建OD成本矩陣圖層也指定了要查找的默認目的點數為1,反向思維這里將火點作為起始點,駐防點作為目的點,確定最優OD矩陣。
求解
點擊Network Analyst工具欄上求解按鈕,若在數據准備階段未處理路網懸掛點,會出現如下警告信息(本文作為演示未處理)。
求解結果為產出OD線層,Name字段為網絡分析對象的名稱;OriginID和DestinationID字段為起始點和目的地點的唯一ID值;DestinationRank字段為關聯起始點找到的所有目的地中各目的地的等級,離起始點最近的目的地的等級為 1;Total_長度字段為起始點和目的地之間沿網絡行駛的距離(盡管顯示為直線,此值為沿網絡實際距離)。


路徑分析
使用OD成本矩陣就已經實現了目的,如要獲得沿路網路徑,可使用路徑分析。
創建路徑分析圖層
使用工具箱創建路徑分析圖層工具或者Network Analyst工具欄新建路徑。
生成停靠點層
使用OD成本矩陣生成的線分別與起始點、目的點相交。


同一條OD線可能會與起始點或目的點存在超過兩個交點,可使用OriginID或DestinationID與FID_Destination或FID_Origin是否相等來判斷並將其刪除。
這就得到OD線兩個端點,對起始點.shp和目的點.shp添加Sequence字段,起始點.shp字段內容設為2,目的點.shp字段內容設為1(這里糾正過來,因上面采取逆向方法確定火點最近駐防點)。
將起始點.shp和目的點.shp合並獲得停靠點層,創建RouteName字段,字段內容為Name字段,可使用字段計算器如下Python代碼糾正其方向描述。
(!Name!.split("-")[1]+"-"+!Name!.split("-")[0]).strip()
求解
在Network Analyst窗口選擇路徑,加載停靠點。
點擊Network Analyst工具欄上求解按鈕,求解結果為各組停靠點對應的路徑。


