付開宇, 李 兵, 劉 云
(云南省地圖院 地理國情分院,云南 昆明 650034)
根據交通部下發的交通運輸部關于開展國家公路網命名編號調整工作的通知(交公路法[2018]27號),各省要統一和規范國家公路路線命名和編號。由于公路建設的發展,公路維護、改道等原因,使得部分公路的公路里程發生了改變,需要對公路的里程進行重新確認,同時對路上的一些交通標志設施(里程樁,里程牌等)的位置重新定位。過去在進行里程樁定位推算的時候,需要外業人員進行測量放樣。以一個整樁號的里程樁作為起始點,再用測量工具根據推算距離量測到下一個樁的位置,這樣施工需要花費大量的人力物力,效率和準確性都不是太高。公路里程樁是一種科學有效的公路定位手段,對駕駛員定位,交通事故救援,路面維護等具有非常重要的意義。本文旨在提出一種能高效準確地確定里程樁位置的方法。
在傳統的地理信息系統中,線性要素一般被抽象為一系列的有序點集合,通過這種方式可以快速定位線性要素上某個節點的位置。但是在實際生活當中,如公路、鐵路、河流、地下管道等,我們往往是利用沿線距離來定位某個離散點的位置,這些沿線距離通常是用線性物體自身的測量值來表達。但線性物體是不規則的曲線,如果沿線的相對距離用各節點間的直線距離進行累加,不僅繁瑣,而且還會出現累積誤差。因此,如果能建立一套線性參考系統,就能將線性要素作為一個整體進行操作,線上點位置的描述就可以從平面的x,y值轉換為沿線距離。
1 線性參考(Linear Reference)
線性參考(Linear Reference)是一種利用沿著可測量的線性要素的相對位置來存儲地理位置的方法,即利用距離來確定沿線位置。在交通行業中對道路位置信息的記錄并不是使用實際的地理坐標,而是利用道路里程。通過給道路建立線性參考系統,就能準確地推算出里程樁的位置。
在ArcGIS Desktop中,可以利用它提供的線性參考工具箱(Linear Reference)中的創建路徑(Create Routes)工具給線性數據添加線性參考,添加完畢后的線性數據就變成了帶有m值的路徑。
2 路徑
路徑是一個線性特征,并有與其幾何特征存儲在一起的線性測量系統。在ArcGIS的GeodataBase數據模型中,把路徑看成是折線要素類。路徑要素類的幾何值包含x,y和m值。x值和y值確定線性要素在坐標系中的位置;m值與路徑的線性測量系統有關,在交通行業中一般用道路的長度(里程)來表示。
數據是整個方法實施的基礎,精確的數據才能得到精確的結果。首先根據道路所在帶號對路網數據進行投影轉換;然后用創建路徑工具對投影轉換后的數據添加線性參考系統,確定路網的方向,選擇投影距離作為測量值,這樣就生成了帶m值的數據;最后根據里程樁樁號的計算規則進行推算(本文基于ArcObjects開發了樁號推算工具,利用推算工具進行計算),得到里程樁位置。
1 數據處理流程
a)根據公路所在帶號進行投影轉換,如果公路出現跨帶的情況,可以根據帶號把路網截斷,公路的長度為投影的長度。
b)用ArcGIS的創建路徑工具(Create Routes)給公路數據添加線性參考系統,用投影距離作為測量值。
c)根據里程樁樁號的推算規則,使用處理好的數據進行推算,利用ArcObjects開發的工具進行操作。
d)導出推算后的里程樁數據。

圖1 數據處理流程
2 里程樁樁號推算工具
基于ArcObjects開發樁號推算工具,可以利用帶有m值的路網數據進行里程樁樁號推算。ArcObjects提供了一個重要的接口IMSegmentation,這個接口可以對有線性參考系統的Polyline和Polygon進行操作。該接口提供了GetPointsAtM方法,通過此方法可以獲取的線上任意m值所在的點位,這樣通過m值(里程值)就可以得到任意點的坐標位置。
下面結合圖2-2和圖2-3說明一下里程樁號推算算法步驟:
(1)導入帶有m值的路網數據;
(2)確認起算點,直接從路徑的起點開始,推算到整條路的終點;
(3)輸入起點樁號,并檢查輸入的樁號是否符合規范,并計算初始距離。如K1或者K1+200,否則輸入內容不符合規范。K1表示起點樁是K1,初始距離為0米;K1+200,表示起點樁是K1,初始距離為200米;
(4)輸入每個里程樁之間的距離,默認1 000米;
(5)利用這條公路的總里程和每個里程樁之間的距離計算出總路樁數;再用路樁總數循環計算出每個路樁的位置(通過GetPointsAtM方法獲取每個點的位置)。如果起點是整樁號的話,比如起點樁號是K1,則第一個樁就在距離K1樁1 000m處,第二個樁就在距離K1樁2 000m處;如果起點是非整樁號的話,比如起點樁號是K1+200,則第一個樁就在距離K1+200樁800m處,第二個樁就在距離K1+200樁180 0m處,其實距離K1樁還是1 000m和2 000m,以此類推,就可以得到所有的整樁號里程樁的位置(除去起點),并把結果保存到集合中;最后把起點和終點分別加入到集合的首部和尾部,再根據樁號的命名規則,從起點樁號開始計算,最終得出所有里程樁的具體位置和樁號。下面附上計算里程樁位置的關鍵代碼:
IMSegmentation segmentation = polyline as IMSegmentation;
IList
var counter = (int)(segmentation.MMax - segmentation.MMin) / splitDistance;
for (int i = 0; i < counter; i++)
{
var distance = (i + 1) * splitDistance-startDistance;
distance += segmentation.MMin;
var find = segmentation.GetPointsAtM(distance, 0);
points.Add(find);
}
這里的segmentation就是我們要進行推算的路徑;points是找到的樁號點集合;splitDistance是每個樁之間的間距(默認1 000米);startDistance是通過樁號得到的初始距離,例如K1則startDistance等于0,K1+200則startDistance等于200;用總里程和間距得到要推算的樁的數量counter;通過循環利用GetPointsAtM方法即可推出該路徑上的所有里程樁位置。計算完樁號位置后,把數據保存到shapefile文件中,同時計算樁號。
IFeatureCursor featureCursorInsert = _tempFeatureClass.Insert(true);
for (int i = 0; i < points.Count; i++)
{
var point = points[i];
if (i == 0)
{
featureBuffer.Value[featureBuffer.Fields.FindField("MileageName")]= startMileage;
}
else if ((i == points.Count - 1)&&(points.Count>2))
{
featureBuffer.Value[featureBuffer.Fields.FindField("MileageName")] =
$"K{mileageNum}+”+ (int)(point.M - points[points.Count - 2].M);
}
else
{
featureBuffer.Value[featureBuffer.Fields.FindField("MileageName")]= $"K{++mileageNum}";
}
featureBuffer.Shape = point;
featureCursorInsert.InsertFeature(featureBuffer);
}
這里的points就是加入起點和終點后的所有里程樁點位的集合;startMileage為起點樁號,例如K1;mileageNum是K后面的數字,例如K1就是1。第一個判斷是計算起點樁號;第二個判斷是計算終點樁號,終點有可能不是整樁號,其樁號為倒數第二個點的樁號+剩余距離,例如K125+400;最后一步則是計算其余整樁的樁號。
(6)導出里程樁數據。

圖2 里程樁位置推算流程

圖3 里程樁樁號推算流程

圖4 樁號推算工具
根據推算結果,進行了某條路的實測數據和推算數據對比,外業采集了大約60個點的數據。如圖5所示,圖中綠色圓點為推算數據,紅色三角為外業GPS實測點。在圖上可以看到推算結果和實測結果很接近,通過在ArcGIS中進行計算,實測點和推算點之間大概相差20米左右,如圖6所示。

圖5 推算結果和實際測量結果對比

圖6 推算和實測局部比較
利用實測點和推算點對路線進行切割處理后,對比圖7和圖8可以看到推算出來的數據每個點之間的距離基本一致,而實測點之間的距離則存在著10-50米的偏差。利用ArcGIS進行統計,可以得到進一步的統計信息。通過對比圖9和圖10可以看到,二者在平均值上幾乎都等于1000米;在最大值和最小值的差值上,實測結果相差了120米,而推算結果不到1米;實測結果的標準差為35.34,推算結果的標準差為0.11;在頻數分布圖上可以看到,推算方法的分布圖比實測的更為集中。通過統計對比,可以得知利用該方法處理得到的里程樁位置精度有了明顯的提升。

圖7 推算點之間的距離

圖8 實測點之間的距離

圖9 推算點統計信息

圖10 實測點統計信息
在公路系統中,里程樁是一項重要定位參照物,它能幫助人們迅速定位在公路上的位置。本文提出的這種方法能快速準確的計算出里程樁的位置,提高數據生產效率,降低作業成本。但是該方法也有不足之處,由于在計算距離的時候使用的投影距離,因此在坡度較大的地方,道路投影下來的里程會比實際里程短,所以在這些情況下的計算要還結合實際的情況和相關指標進行調整。數據生產完成后,我們可以借助WebGIS技術實現電子化的施工管理,施工人員利用移動設備,根據坐標快速找到施工點位,完成里程樁的布設,管理人員也可以通過電子地圖實時了解到施工進展。目前該方法已經廣泛運用到云南省高速公路和國省道的里程樁施工中,極大地提高了工作效率。