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