付開宇, 李 兵, 劉 云
(云南省地圖院 地理國情分院,云南 昆明 650034)
根據(jù)交通部下發(fā)的交通運輸部關(guān)于開展國家公路網(wǎng)命名編號調(diào)整工作的通知(交公路法[2018]27號),各省要統(tǒng)一和規(guī)范國家公路路線命名和編號。由于公路建設(shè)的發(fā)展,公路維護、改道等原因,使得部分公路的公路里程發(fā)生了改變,需要對公路的里程進行重新確認,同時對路上的一些交通標志設(shè)施(里程樁,里程牌等)的位置重新定位。過去在進行里程樁定位推算的時候,需要外業(yè)人員進行測量放樣。以一個整樁號的里程樁作為起始點,再用測量工具根據(jù)推算距離量測到下一個樁的位置,這樣施工需要花費大量的人力物力,效率和準確性都不是太高。公路里程樁是一種科學有效的公路定位手段,對駕駛員定位,交通事故救援,路面維護等具有非常重要的意義。本文旨在提出一種能高效準確地確定里程樁位置的方法。
在傳統(tǒng)的地理信息系統(tǒng)中,線性要素一般被抽象為一系列的有序點集合,通過這種方式可以快速定位線性要素上某個節(jié)點的位置。但是在實際生活當中,如公路、鐵路、河流、地下管道等,我們往往是利用沿線距離來定位某個離散點的位置,這些沿線距離通常是用線性物體自身的測量值來表達。但線性物體是不規(guī)則的曲線,如果沿線的相對距離用各節(jié)點間的直線距離進行累加,不僅繁瑣,而且還會出現(xiàn)累積誤差。因此,如果能建立一套線性參考系統(tǒng),就能將線性要素作為一個整體進行操作,線上點位置的描述就可以從平面的x,y值轉(zhuǎn)換為沿線距離。
1 線性參考(Linear Reference)
線性參考(Linear Reference)是一種利用沿著可測量的線性要素的相對位置來存儲地理位置的方法,即利用距離來確定沿線位置。在交通行業(yè)中對道路位置信息的記錄并不是使用實際的地理坐標,而是利用道路里程。通過給道路建立線性參考系統(tǒng),就能準確地推算出里程樁的位置。
在ArcGIS Desktop中,可以利用它提供的線性參考工具箱(Linear Reference)中的創(chuàng)建路徑(Create Routes)工具給線性數(shù)據(jù)添加線性參考,添加完畢后的線性數(shù)據(jù)就變成了帶有m值的路徑。
2 路徑
路徑是一個線性特征,并有與其幾何特征存儲在一起的線性測量系統(tǒng)。在ArcGIS的GeodataBase數(shù)據(jù)模型中,把路徑看成是折線要素類。路徑要素類的幾何值包含x,y和m值。x值和y值確定線性要素在坐標系中的位置;m值與路徑的線性測量系統(tǒng)有關(guān),在交通行業(yè)中一般用道路的長度(里程)來表示。
數(shù)據(jù)是整個方法實施的基礎(chǔ),精確的數(shù)據(jù)才能得到精確的結(jié)果。首先根據(jù)道路所在帶號對路網(wǎng)數(shù)據(jù)進行投影轉(zhuǎn)換;然后用創(chuàng)建路徑工具對投影轉(zhuǎn)換后的數(shù)據(jù)添加線性參考系統(tǒng),確定路網(wǎng)的方向,選擇投影距離作為測量值,這樣就生成了帶m值的數(shù)據(jù);最后根據(jù)里程樁樁號的計算規(guī)則進行推算(本文基于ArcObjects開發(fā)了樁號推算工具,利用推算工具進行計算),得到里程樁位置。
1 數(shù)據(jù)處理流程
a)根據(jù)公路所在帶號進行投影轉(zhuǎn)換,如果公路出現(xiàn)跨帶的情況,可以根據(jù)帶號把路網(wǎng)截斷,公路的長度為投影的長度。
b)用ArcGIS的創(chuàng)建路徑工具(Create Routes)給公路數(shù)據(jù)添加線性參考系統(tǒng),用投影距離作為測量值。
c)根據(jù)里程樁樁號的推算規(guī)則,使用處理好的數(shù)據(jù)進行推算,利用ArcObjects開發(fā)的工具進行操作。
d)導出推算后的里程樁數(shù)據(jù)。
圖1 數(shù)據(jù)處理流程
2 里程樁樁號推算工具
基于ArcObjects開發(fā)樁號推算工具,可以利用帶有m值的路網(wǎng)數(shù)據(jù)進行里程樁樁號推算。ArcObjects提供了一個重要的接口IMSegmentation,這個接口可以對有線性參考系統(tǒng)的Polyline和Polygon進行操作。該接口提供了GetPointsAtM方法,通過此方法可以獲取的線上任意m值所在的點位,這樣通過m值(里程值)就可以得到任意點的坐標位置。
下面結(jié)合圖2-2和圖2-3說明一下里程樁號推算算法步驟:
(1)導入帶有m值的路網(wǎng)數(shù)據(jù);
(2)確認起算點,直接從路徑的起點開始,推算到整條路的終點;
(3)輸入起點樁號,并檢查輸入的樁號是否符合規(guī)范,并計算初始距離。如K1或者K1+200,否則輸入內(nèi)容不符合規(guī)范。K1表示起點樁是K1,初始距離為0米;K1+200,表示起點樁是K1,初始距離為200米;
(4)輸入每個里程樁之間的距離,默認1 000米;
(5)利用這條公路的總里程和每個里程樁之間的距離計算出總路樁數(shù);再用路樁總數(shù)循環(huán)計算出每個路樁的位置(通過GetPointsAtM方法獲取每個點的位置)。如果起點是整樁號的話,比如起點樁號是K1,則第一個樁就在距離K1樁1 000m處,第二個樁就在距離K1樁2 000m處;如果起點是非整樁號的話,比如起點樁號是K1+200,則第一個樁就在距離K1+200樁800m處,第二個樁就在距離K1+200樁180 0m處,其實距離K1樁還是1 000m和2 000m,以此類推,就可以得到所有的整樁號里程樁的位置(除去起點),并把結(jié)果保存到集合中;最后把起點和終點分別加入到集合的首部和尾部,再根據(jù)樁號的命名規(guī)則,從起點樁號開始計算,最終得出所有里程樁的具體位置和樁號。下面附上計算里程樁位置的關(guān)鍵代碼:
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;用總里程和間距得到要推算的樁的數(shù)量counter;通過循環(huán)利用GetPointsAtM方法即可推出該路徑上的所有里程樁位置。計算完樁號位置后,把數(shù)據(jù)保存到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后面的數(shù)字,例如K1就是1。第一個判斷是計算起點樁號;第二個判斷是計算終點樁號,終點有可能不是整樁號,其樁號為倒數(shù)第二個點的樁號+剩余距離,例如K125+400;最后一步則是計算其余整樁的樁號。
(6)導出里程樁數(shù)據(jù)。
圖2 里程樁位置推算流程
圖3 里程樁樁號推算流程
圖4 樁號推算工具
根據(jù)推算結(jié)果,進行了某條路的實測數(shù)據(jù)和推算數(shù)據(jù)對比,外業(yè)采集了大約60個點的數(shù)據(jù)。如圖5所示,圖中綠色圓點為推算數(shù)據(jù),紅色三角為外業(yè)GPS實測點。在圖上可以看到推算結(jié)果和實測結(jié)果很接近,通過在ArcGIS中進行計算,實測點和推算點之間大概相差20米左右,如圖6所示。
圖5 推算結(jié)果和實際測量結(jié)果對比
圖6 推算和實測局部比較
利用實測點和推算點對路線進行切割處理后,對比圖7和圖8可以看到推算出來的數(shù)據(jù)每個點之間的距離基本一致,而實測點之間的距離則存在著10-50米的偏差。利用ArcGIS進行統(tǒng)計,可以得到進一步的統(tǒng)計信息。通過對比圖9和圖10可以看到,二者在平均值上幾乎都等于1000米;在最大值和最小值的差值上,實測結(jié)果相差了120米,而推算結(jié)果不到1米;實測結(jié)果的標準差為35.34,推算結(jié)果的標準差為0.11;在頻數(shù)分布圖上可以看到,推算方法的分布圖比實測的更為集中。通過統(tǒng)計對比,可以得知利用該方法處理得到的里程樁位置精度有了明顯的提升。
圖7 推算點之間的距離
圖8 實測點之間的距離
圖9 推算點統(tǒng)計信息
圖10 實測點統(tǒng)計信息
在公路系統(tǒng)中,里程樁是一項重要定位參照物,它能幫助人們迅速定位在公路上的位置。本文提出的這種方法能快速準確的計算出里程樁的位置,提高數(shù)據(jù)生產(chǎn)效率,降低作業(yè)成本。但是該方法也有不足之處,由于在計算距離的時候使用的投影距離,因此在坡度較大的地方,道路投影下來的里程會比實際里程短,所以在這些情況下的計算要還結(jié)合實際的情況和相關(guān)指標進行調(diào)整。數(shù)據(jù)生產(chǎn)完成后,我們可以借助WebGIS技術(shù)實現(xiàn)電子化的施工管理,施工人員利用移動設(shè)備,根據(jù)坐標快速找到施工點位,完成里程樁的布設(shè),管理人員也可以通過電子地圖實時了解到施工進展。目前該方法已經(jīng)廣泛運用到云南省高速公路和國省道的里程樁施工中,極大地提高了工作效率。