(湖南省第三測繪院,湖南 長沙 410118)
隨著各級政府對基礎(chǔ)建設(shè)加大投入,越來越多的鐵路、公路、管線等線性工程開始進(jìn)行規(guī)劃、設(shè)計(jì)、建設(shè)、使用,地形圖作為各項(xiàng)工作的基礎(chǔ),貫穿線性工程的整個生命周期。線性工程使用的地形圖呈條帶狀,為區(qū)別于其他地形圖,一般稱之為帶狀地形圖。
帶狀地形圖形狀不規(guī)則,呈條帶狀展開,如果使用常規(guī)的矩形分幅或梯形圖幅,圖幅內(nèi)勢必存在大量空白區(qū)域,浪費(fèi)嚴(yán)重,圖幅數(shù)量巨大,管理不便。
為解決常規(guī)分幅帶來的問題,各位研究者提出了多種解決方案,并且在AutoCAD、ArcGIS等軟件平臺進(jìn)行了實(shí)踐。
舒玲霞等[1]采用線性回歸的方法對線性工程中心線進(jìn)行分析,將帶狀地形圖按A3幅面進(jìn)行分幅,能充分利用圖紙,且布局較為美觀。楊善文等[2]采用矢量數(shù)據(jù)結(jié)構(gòu)中的Spaghetti結(jié)構(gòu)與拓?fù)鋽?shù)據(jù)結(jié)構(gòu)相結(jié)合的數(shù)據(jù)結(jié)構(gòu)來表達(dá)矢量數(shù)據(jù)模型,對帶狀地形圖進(jìn)行分幅。黨濤等[3]研究了在ArcGIS下采用C#語言進(jìn)行帶狀地形圖分幅。
目前已有的分幅方法主要考慮充分利用圖紙,未對圖件管理和使用進(jìn)行充分研究,分幅后圖幅數(shù)量多,相鄰圖幅首尾中心線指向不一,拼接麻煩,使用不便。
筆者采用C++語言,基于AutoCAD2007軟件平臺,使用ObjectARX開發(fā)了帶狀地形圖分幅軟件,采用連續(xù)排版方式,將帶狀地形圖打印在長度不限的單張圖紙,采用手風(fēng)琴式折疊,折疊后寬度為210 mm,與普通A4紙一致,便于保存歸檔。使用時可方便地展開至所需要的任意區(qū)域,沿分幅圖框線對折即可完成拼接。
軟件主要流程:
(1)獲取線路中心線,采用固定寬度緩沖的方式獲得地形圖范圍。(2)計(jì)算包含帶狀地形圖的最小矩形。如果最小矩形的寬度小于圖紙寬度,則輸出為單一圖框圖紙,跳過(3)(4)(5)步驟。(3)以線路中心線第一條折線作為起始邊,確定第一個圖幅的梯形圖框范圍。(4)確定下一圖幅范圍,直到終點(diǎn),圖幅范圍數(shù)據(jù)包括起終點(diǎn)的中心線位置,起終點(diǎn)分幅裁切線的方向。(5)計(jì)算各圖框外接矩形需要的總長度,確定各分幅圖框在總圖中的目標(biāo)位置。(6)按分幅裁切線分割圖形,并移動至總圖中的目標(biāo)位置,繪制梯形圖幅圖框。(7)添加矩形圖廓,矩形圖廓圖框包含全部梯形圖幅。(8)加入折疊標(biāo)志,從矩形圖幅起點(diǎn)開始,每210 mm(圖上距離)在矩形圖框的兩條長邊添加3 mm長的短線,作為折疊標(biāo)記。(9)加入封面、封底。封面主要包括線路名稱、線路起點(diǎn)里程、線路終點(diǎn)里程、圖形比例尺等信息。封底主要包括圖例和必要的備注信息。
軟件設(shè)計(jì)了多個數(shù)據(jù)結(jié)構(gòu)和輔助函數(shù),以下說明部分?jǐn)?shù)據(jù)結(jié)構(gòu)和輔助函數(shù)。
用于保存梯形圖框信息的數(shù)據(jù)結(jié)構(gòu)如下:
class CTrapezoidFrame
{
public:
CTrapezoidFrame():drct(0),startAngle(0),endAngle(0){};
AcGePoint3d startPt;//中線的起點(diǎn)
AcGePoint3d endPt;//中線的終點(diǎn)
double drct;//中線的方向
double startAngle;//起點(diǎn)邊的方向
double endAngle;//終點(diǎn)邊的方向
AcGePoint3d extStartPt;//外接矩形中線起點(diǎn)
AcGePoint3d extEndPt;//外接矩形中線終點(diǎn)
double extStartLen;//外接矩形的中線起點(diǎn)至圖框中線起點(diǎn)的距離
double extEndLen;//外接矩形的中線終點(diǎn)至圖框中線終點(diǎn)的距離
};
基于同名坐標(biāo)點(diǎn)構(gòu)建轉(zhuǎn)換矩陣的輔助函數(shù):
AcGeMatrix3d GetFourParamsXform(
AcGePoint3d &srcPt1,//原始點(diǎn)1
AcGePoint3d &srcPt2,//原始點(diǎn)2
AcGePoint3d &destPt1,//目標(biāo)點(diǎn)1
AcGePoint3d &destPt2//目標(biāo)點(diǎn)2
)
要實(shí)現(xiàn)連續(xù)橫排的圖紙?jiān)趯φ酆笸暾舆?,圖幅之間的分割線方向必須是線路中心線的垂直方向,如果是線段的折點(diǎn)處,則分割線的方向必須是折點(diǎn)的角平分線方向。
為提高搜索效率,圖幅分割點(diǎn)按線路中心線逐折點(diǎn)搜索,如果相鄰折點(diǎn)間距離大于500 m,則以500 m為步進(jìn)逐步搜索,在各搜索點(diǎn)形成分割線。
為減少軟件計(jì)算時間,以線路中心線外擴(kuò)固定距離形成的邊線構(gòu)成圖形范圍,圖幅分割線與邊線求交點(diǎn),如果交點(diǎn)與圖框中線的距離超過內(nèi)圖框?qū)挾鹊囊话?,則視為圖形超出圖框,確定前一個點(diǎn)為圖幅間分割點(diǎn),該處垂線或角平分線為分割線。
在長直線路段如果第一幅圖的圖幅中線方向與直線段不平行,直線段將被進(jìn)行多次裁切,形成的圖幅數(shù)量多,因此需要對較長圖幅進(jìn)行優(yōu)化。
從長直路段第二幅圖開始,搜索到本圖幅的末尾分割點(diǎn)時,記錄本圖幅和上一圖幅的長度之和,作為已有最大長度的參考值。將本圖幅起始分割點(diǎn)逐節(jié)點(diǎn)往回撤,計(jì)算回撤后本圖幅的末尾分割點(diǎn),計(jì)算此時本圖幅和上一圖幅的長度之和,如果長度大于已有最大長度,則將該長度作為已有最大長度的參考值,直到找出最大值,以最大值所在的起始分割點(diǎn)和末尾分割點(diǎn)作為本圖幅的范圍,并修改上一圖幅的末尾分割點(diǎn)。
下面以某帶狀地形圖為例進(jìn)行效果演示,圖1為原始帶狀地形圖,圖2為添加梯形圖框后的示意圖,圖3為分幅成果示意圖。
圖1 原始帶狀地形圖
圖2 繪制梯形圖框
圖3 分幅成果圖
筆者所在單位利用本軟件對湖南境內(nèi)數(shù)千公里鐵路進(jìn)行了分幅處理,解決了帶狀圖連續(xù)分幅圖幅接邊拼接問題,并通過優(yōu)化,使分幅后圖紙總長度最短,取得了良好的經(jīng)濟(jì)效果。