沈華英
1.概述
隨著移動智能設(shè)備的普及,導(dǎo)航等基于GIS系統(tǒng)的應(yīng)用滲透進(jìn)了生活的各個方面,其為人們的生活提供了巨大的便利的。GIS系統(tǒng)作為其中的基礎(chǔ)設(shè)施,其上各種算法的優(yōu)劣決定了應(yīng)用的反饋速度,進(jìn)決定了用戶的體驗,其中路徑距離分析是關(guān)鍵的環(huán)節(jié)之一。
路徑距離分析一般要至少設(shè)置兩個點上,起止點或多個點之間。分析之后的結(jié)果為這些點之間的距離與路徑。這些參數(shù)需要用戶事先輸入,一般可以通過輸入設(shè)備直接定義。在二維條件下,鼠標(biāo)的點擊就可以確定位置,提供一個坐標(biāo)可以惟一地確定一個點,然而在三維環(huán)境下還需要三個坐標(biāo)軸才能確定一個點的位置。開始路徑距離分析之前,最基本的歐式距離分析和成本距離分析。歐氏距離分析遵循的就是我們小學(xué)都知道的“兩點之間直線最短”的原則,兩點之間的最短路徑就是兩點之間的線段的距離。但是實際情況并不是很完美,有時我們無法完全沿直線前往某個位置,例如遇到河流、陡坡、懸崖等障礙。這時,我們就應(yīng)該考慮使用成本距離工具獲得更現(xiàn)實的結(jié)果。如何在三維空間中做好路徑距離分析是本文要探討的內(nèi)容。
2.路徑距離分析
目前有很多GIS軟都提供了路徑分析功能,如ArcGIS,TransCAD,MapInfo等,但都是在2維平面上進(jìn)行的。以ArcGIS為例,它的ArcMap平臺提供了一個稱為Utility Network Analysis的工具欄來提供路徑分析功能,但是在它的3維GIS平臺ArcScene中卻沒有路徑分析的工具ArcMap中的路徑分析工具,其背后都是通過ArcObject組件對象模型COM實現(xiàn)的,該組件提供了眾多的接口來實現(xiàn)GIS分析功能。而Arccene程序也能訪問ArcObject組件,因此真正的區(qū)別在于:ArcScene展示的是一個3維空間。
路徑距離分析與成本距離分析相似,兩者都用于確定從源到柵格上各像元位置的最小累積行進(jìn)成本。但是,路徑距離不僅可計算成本表面的累積成本,而且可以考慮到從一個位置到另一個位置的總移動成本的水平和垂直因子補(bǔ)償。這些工具生成的累積成本表面可用于擴(kuò)散建模、流向運動和最低成本路徑分析。路徑距離工具既考慮水平和垂直成本要素,又考慮真實表面距離。
(1)水平系數(shù)
水平系數(shù)(HF)從像元移動時所遇到的水平阻力因素的角度出發(fā),確定從一個像元移到另一個像元的成本,或者說是困難。在路徑距離分析中,提供了確定水平方向成本的參數(shù),水平柵格必須中存儲了各個像元位置指定的水平角度,例如在上面開車的例子中,指的就是風(fēng)向。水平方向以度為單位進(jìn)行定義,0表示位于待處理像元的上方(或北方),值沿順時針方向增加,形成一個圓并在360度時回到原始位置。另外引入的一個概念是,水平相對移動角度(HRMA),這是水平角度和前進(jìn)角度的夾角,例如我們在風(fēng)中行駛的汽車的行駛角度和風(fēng)向的夾角。
1)LINEAR——線性水平系數(shù)
HF由HRMA-HF坐標(biāo)系中的一條直線確定。這條線在y軸(表示HF系數(shù))上與零系數(shù)(Zero Factor)相關(guān)聯(lián)的值處進(jìn)行截取。線的斜率(Slop)可以使用SLOPE參數(shù)指定。如果未確定斜率,則默認(rèn)值為0.5/45或1/90(指定為0.01111)。默認(rèn)切削角為181度,這相當(dāng)于無切削。默認(rèn)零系數(shù)為0.5。
2)INVERSE_LINEAR——逆線性水平系數(shù)
HF由HRMA-HF坐標(biāo)系中的一條直線的逆向值確定。這條線在y軸(表示HF系數(shù))上與零系數(shù)相關(guān)聯(lián)的值處進(jìn)行截取。線的斜率可以使用 SLOPE 修飾屬性進(jìn)行指定。如果未確定斜率,則默認(rèn)值為-2/180或-1/90(指定為 0.01111)。默認(rèn)切削角為181度,這相當(dāng)于無切削。默認(rèn)零系數(shù)為2.0。
3)Table——自定義表格
如果前面四種既定設(shè)定在算法中不能滿足要求,我們還可以自定表格參數(shù),該文件的每一行有兩列值與之對應(yīng)。第一列值用于識別 HRMA(以度為單位表示),第二列值為HF。文件中的每行指定圖表中的一個點。兩個連續(xù)的點定義HRMA-HF坐標(biāo)系中的一條線段。HRMA角度必須按升序輸入。對于所有小于第一個(最低)輸入值或大于最后一個(最大)輸入值的 HRMA角度,其HF系數(shù)將設(shè)置為無窮大。
路徑分析不僅可以考慮到水平方向的影響因子,而且可以考慮到垂直方向的影響因子,例如前面開車的例子中,水平方向的影響因子是風(fēng)向,垂直方向的影響因子就是路面的起伏狀況。
(2)垂直系數(shù)
垂直系數(shù)越大,移動的難度也就越大。確定從一個像元行進(jìn)到另一個像元時遇到的垂直系數(shù)(VF)與確定水平系數(shù)(HF)相似。這里需要引入一個概念,垂直相對移動角度(VRMA),垂直相對移動角度(VRMA)是“起始”像元與“目標(biāo)”像元形成的斜率的角度,斜率=垂直增量/水平增量。VRMA以度為單位進(jìn)行指定。VRMA的值范圍為-90到+90度。
1)Binary——二元垂直系數(shù)
當(dāng) VRMA大于切削角下限且小于切削角上限時,在兩個像元之間移動的VF設(shè)置為與零系數(shù)相關(guān)聯(lián)的值。如果VRMA大于切削角上限或者小于切削角下限,則VF設(shè)置為無窮大。工具默認(rèn)的切削角為正負(fù)30度。
2)Linear——線性垂直系數(shù)
VF由VRMA-VF坐標(biāo)系中的一條直線確定。這條線在y軸上與零系數(shù)相關(guān)聯(lián)的值處進(jìn)行截取。線的斜率可以使用SLOPE屬性進(jìn)行指定。如果未確定斜率,則默認(rèn)值為1/90(指定為0.01111)。默認(rèn)的切削角下限為-90度,而默認(rèn)的切削角上限為90度。
3)Inverse Linear——逆線性垂直系數(shù)
這個與線性垂直系數(shù)類似,VF由VRMA-VF坐標(biāo)系中的一條直線的逆向值確定。這條線在y軸(表VF系數(shù))上與零系數(shù)相關(guān)聯(lián)的值處進(jìn)行截取。線的斜率可以確定(如果使用SLOPE修飾屬性指定)。如果未確定斜率,則默認(rèn)值為-1/45(指定為0.02222)。默認(rèn)的切削角下限為-45度,而默認(rèn)的切削角上限為45度。
4)Symmetric Linear——對稱線性垂直系數(shù)
SYM_LINEAR由兩個與VRMA相關(guān)的線性函數(shù)組成,這兩個函數(shù)關(guān)于VF(y) 軸對稱。兩條線都在與零系數(shù)相關(guān)聯(lián)的VF值處截取y軸。使用 SLOPE垂直系數(shù)修飾屬性相對于正VRMA定義線的斜率,然后將針對負(fù)VRMA生成一個鏡像。默認(rèn)斜率為1/90(指定為 0.01111)。默認(rèn)的切削角下限為-90,而默認(rèn)的切削角上限為90。
5)Symmetric Inverse Linear——對稱線性垂直系數(shù)
顧名思義,SYM_INVERSE_LINEAR與SYM_LINEAR垂直系數(shù)關(guān)鍵字正相反。它由兩個與VRMA相關(guān)的線性函數(shù)組成,這兩個函數(shù)關(guān)于VF(y)軸相對稱。兩條線都在VF值為1處截取y軸。使用SLOPE垂直系數(shù)修飾屬性相對于與正VRMA定義線的斜率,然后將針對負(fù)VRMA生成一個鏡像。默認(rèn)斜率為-1/45(指定為.02222)。默認(rèn)的切削角下限為-45,而默認(rèn)的切削角上限為45。
6)Cos——余弦垂直系數(shù)
VF由VRMA的余弦函數(shù)確定。默認(rèn)的切削角下限為-90度,而默認(rèn)的切削角上限為90度。默認(rèn)的COSPOWER為1.0。
7)Sec——正割垂直系數(shù)
VF由VRMA的正割函數(shù)確定。默認(rèn)的切削角下限為-90度,而默認(rèn)的切削角上限為90度。默認(rèn)的SECPOWER為1.0。
8)Cos-Sec——余弦正割垂直系數(shù)
當(dāng)VRMA度數(shù)為負(fù)值時,VF由VRMA的余弦函數(shù)確定。如VRMA度數(shù)為正值,VF則由VRMA的正割函數(shù)確定。默認(rèn)的切削角下限為-90度,而默認(rèn)的切削角上限為90度。默認(rèn)的COSPOWER和SECPOWER均為1.0。
9)Sec-Cos——正割余弦垂直系數(shù)
當(dāng)VRMA度數(shù)為負(fù)值時,VF由VRMA的正割函數(shù)確定。如VRMA度數(shù)為正值,VF則由VRMA的余弦函數(shù)確定。默認(rèn)的切削角下限為-90度,而默認(rèn)的切削角上限為90度。默認(rèn)的COSPOWER和SECPOWER均為1.0。
10)Table——自定義表格垂直系數(shù)
與 HRMA 圖一樣,VRMA 圖中的字符可由修飾屬性進(jìn)行進(jìn)一步的控制,從而細(xì)化垂直系數(shù),這個就不再贅述了。
3.路徑距離分析在GIS中的應(yīng)用
通過從前文的分析,通過水平與垂直兩個方向上的各種標(biāo)量,我們可以很有效的去頂兩點的距離與路徑,目前有很多GIS軟都提供了路徑分析功能,如ArcGIS,TransCAD,MapInfo等,但都是在2維平面上進(jìn)行的。以 ArcGIS為例,它的ArcMap平臺提供了一個稱為Utility Network Analysis的工具欄來提供路徑分析功能,但是在它的3維GIS平臺ArcScene中卻沒有路徑分析的工具ArcMap中的路徑分析工具,其背后都是通過ArcObject組件對象模型COM實現(xiàn)的,該組件提供了眾多的接口來實現(xiàn)GIS分析功能。而Arccene程序也能訪問ArcObject組件,因此真正的區(qū)別在于:ArcScene展示的是一個3維空間。
在ArcScene平臺中,如果用戶點擊在TIN以外的區(qū)域,則無法確定站點的位置;如果用戶點擊在TIN表面上,則通過調(diào)用ISceneGraph接口的Locate命令能確定該點的Z坐標(biāo),鼠標(biāo)點擊實際上定義了一條指向屏幕內(nèi)部的射線,Locate命令計算并返回該射線與TIN的交點路徑分析需要的站點必須位于道路網(wǎng)上,因此還要將得到的交點投影到道路網(wǎng)上這里用到了IPointToEID接口,該接口的GetNearestEdge方法將鼠標(biāo)創(chuàng)建的點投影到最近的道路上。點是否能投影到道路上取決于捕捉容限SnapTolerance的大小捕捉容限小意味著離道路網(wǎng)稍遠(yuǎn)一些的點就無法投影到網(wǎng)絡(luò)上,此處將捕捉容限設(shè)為TIN表面寬度和高度中的最大值。
總而言之,當(dāng)需要計算最短路徑的時候,需要考慮和前進(jìn)方向有關(guān)的水平阻力因子和垂直阻力因子的時候,可以使用工具中的既定算法模型,通過配置參數(shù)達(dá)到目的,或者自定義表格自定義細(xì)化水平或垂直系數(shù)。
參考文獻(xiàn)
[1]鄔倫,等.地理信息系統(tǒng)—原理、方法和應(yīng)用[M].北京:科學(xué)出版社,20012
[2]中地信息工程有限公司.MAPGIS地理信息系統(tǒng)開發(fā)手冊[M].19983.
[3]王國印,等譯.Visualc++技術(shù)內(nèi)幕(第四版)[J].北京:清華大學(xué)出版社,1999.
[4]石俊衛(wèi),包世泰,馮煜.基于A*算法的山地最優(yōu)路徑分析[J].-現(xiàn)代計算機(jī)(普及版),2013(5).