冀幼平
(中鐵國際集團(tuán)有限公司,北京 100039)
鐵路建設(shè)必然要占用土地資源,改變原有土地的使用功能,并對沿線范圍內(nèi)的經(jīng)濟(jì)、環(huán)境和居民生活產(chǎn)生重要影響。合理用地可充分利用土地資源,使沿線土地升值,使未被利用土地充分發(fā)揮其功能,帶動沿線經(jīng)濟(jì)發(fā)展,改善周邊居民生活環(huán)境,否則,將導(dǎo)致土地資源浪費(fèi),破壞生態(tài)環(huán)境,甚至影響沿線居民基本生活和經(jīng)濟(jì)產(chǎn)業(yè)布局[1]。
在規(guī)劃階段,用地設(shè)計主要是使公路盡量繞避不良地質(zhì)地段,以減少工程造價;遠(yuǎn)離環(huán)境保護(hù)區(qū)域,以實(shí)現(xiàn)人與環(huán)境的和諧發(fā)展;靠近重要經(jīng)濟(jì)據(jù)點(diǎn),以促進(jìn)沿線經(jīng)濟(jì)發(fā)展;并盡可能的少侵入居民聚集地,以避免大量的居民拆遷。在設(shè)計階段,用地設(shè)計的主要任務(wù)是檢查設(shè)計用地是否完全滿足規(guī)劃階段的要求,根據(jù)實(shí)際需要對用地進(jìn)行適當(dāng)調(diào)整,盡可能精確地計算征地數(shù)量和費(fèi)用[2-3]。
傳統(tǒng)的用地設(shè)計主要是依靠人工在地形圖上進(jìn)行分析計算。該方法效率低、工作量大、易出錯,用地面積和費(fèi)用計算精度低。對此,提出一種基于Object-ARX自定義實(shí)體的鐵路用地輔助設(shè)計方法。首先定制鐵路用地區(qū)域和各類既有地理區(qū)域(包括:既有建筑物、經(jīng)濟(jì)作物區(qū)、環(huán)境保護(hù)區(qū)等)的自定義實(shí)體,用戶可像操作AutoCAD自有的直線、圓等實(shí)體一樣,方便地對這些自定義實(shí)體進(jìn)行編輯、修改、拖動;然后設(shè)計了任意多邊形之間的重疊面積算法,并在此基礎(chǔ)上實(shí)現(xiàn)了征地、拆遷面積和費(fèi)用的自動統(tǒng)計。該方法能輔助設(shè)計人員進(jìn)行用地分析,顯著降低設(shè)計人員的工作強(qiáng)度,提高設(shè)計效率。
用地區(qū)域是由鐵路路基地段左右側(cè)用地樁所構(gòu)成的封閉多邊形。將左右側(cè)的相鄰用地樁分別連接起來,并在橋隧頭尾處封閉起來,即可形成用地區(qū)域。因而,可采用用地樁數(shù)組來表示用地區(qū)域。
在進(jìn)行用地設(shè)計的過程中,設(shè)計人員通常習(xí)慣給定各樁號里程Mi及樁號左右側(cè)用地寬WLi和WRi的方式來表示用地樁?;谶@種設(shè)計習(xí)慣,考慮到繪圖和計算中都需要反復(fù)使用到該樁號處的線路中線坐標(biāo)和用地樁坐標(biāo),本文設(shè)計的用地樁數(shù)據(jù)結(jié)構(gòu)如下:
typedef struct
{
double Millage;//用地樁里程Mi
double Cen_N,Cen_E;//線路中線經(jīng)度距坐標(biāo)Ni,Ei
double Alfa;//該樁號的坐標(biāo)方位角αi
double Left_Wide,Right_Wide;//左、右側(cè)用地寬 WLi,WRi
double Left_N,Left_E;//左、右側(cè)用地樁的經(jīng)度距坐標(biāo) NLi,ELi
double Right_N,Right_E;//右側(cè)用地樁的經(jīng)度距坐標(biāo) NRi,ERi
}LandStation//用地樁Si
根據(jù)平面交點(diǎn)坐標(biāo)、曲線半徑、緩和曲線長等設(shè)計參數(shù),可以快速計算出Mi里程處的線路中線坐標(biāo)(Ni,Ei)和方位角 αi[4-5]。計算出這 3 個參數(shù)后,左、右側(cè)用地樁坐標(biāo)可按公式(1)計算
AutoCAD是當(dāng)前計算機(jī)輔助設(shè)計中廣泛使用的一個平臺[6]。因此,本鐵路用地設(shè)計系統(tǒng)選擇在該平臺上進(jìn)行開發(fā)。ObjectARX作為AutoCAD的二次開發(fā)工具,不僅提供了AutoCAD自有的直線、圓、多段線等圖形實(shí)體,還允許用戶對其擴(kuò)展,根據(jù)需要定制自定義圖形實(shí)體,用戶可像操作直線、圓等圖形實(shí)體一樣方便地對自定義實(shí)體進(jìn)行數(shù)據(jù)編輯、對象捕捉、夾點(diǎn)拖動等操作[7,8]。
①從實(shí)體基類AcDbEntity派生出用地區(qū)域自定義實(shí)體類Land
class Land:public AcDbEntity;
②在Land類的頭文件中定義類聲明宏
ACRX_DECLARE_MEMBERS(Land);
③在Land類的源文件中定義類執(zhí)行宏
ACRX_DXF_DEFINE_MEMBERS(Land,AcDbEntity;
AcDb::kDHL_CURRENT,AcDb::kMReleaseCurrent,0,Land,“RailDesign”);
④在ARX程序初始化時進(jìn)行用地區(qū)域類的初始化
Land::rxInit();
acrxBuildClassHierarchy();
⑤在ARX程序卸載時清除自定義用地區(qū)域類
deleteAcRxClass(Land::desc())。
自定義實(shí)體在AutoCAD中的顯示由以下3個函數(shù)完成:
Adesk::Boolean worldDraw(AcGiWorldDraw*pWd);與視圖無關(guān)的實(shí)體圖形繪制
void viewportDraw(AcGiViewportDraw*PVd);與視圖相關(guān)的實(shí)體圖形繪制
Adesk::Uint32 setAttributes(AcGiDrawableTraits*pDt);初始化實(shí)體顏色、層和線型等屬性
在自定義實(shí)體類中重載這些函數(shù),便可實(shí)現(xiàn)圖形的繪制。上述3個函數(shù)中worldDraw()函數(shù)必須在自定義實(shí)體類中重載,其余2個可根據(jù)需要選擇。
用地區(qū)域自定義實(shí)體需要具備保存、復(fù)制等操作功能,必須對該自定義實(shí)體進(jìn)行編檔。在用地區(qū)域?qū)嶓w類中重載dwgOut()和dxfOut()的兩個函數(shù),可分別實(shí)現(xiàn)DWG、DXF文件中實(shí)體的編出;dwgIn()和dxfIn()則實(shí)現(xiàn)實(shí)體的編入。編出、編入函數(shù)的實(shí)現(xiàn)首先調(diào)用assertWriteEnabled()和 assertReadEnabled(),然后調(diào)用readItem()和writeItem(),按預(yù)定順序讀、寫該實(shí)體的屬性數(shù)據(jù)。
為使用地區(qū)域?qū)嶓w的修改操作更加方便,為其定義了夾點(diǎn)和夾點(diǎn)拖動操作,如圖1所示。當(dāng)該實(shí)體被選中后,用地樁將突出顯示,并且可以實(shí)時拖動這些用地樁,由計算機(jī)自動刷新用地數(shù)據(jù)。
圖1 用地樁夾點(diǎn)拖動
為便于設(shè)計人員獲取用地樁,可將這些用地樁點(diǎn)作為該自定義實(shí)體的捕捉點(diǎn)。實(shí)現(xiàn)該過程可重載getOsnapPoints()函數(shù),并在該函數(shù)中遍歷所有用地樁,將其加入捕捉點(diǎn)數(shù)組snapPoints中。
通過上述過程便完成了鐵路用地區(qū)域自定義實(shí)體的定制,設(shè)計人員可以像操作AutoCAD自有的直線、多段線、圓一樣,方便地對用地區(qū)域進(jìn)行修改、捕捉、實(shí)時動態(tài)拖動用地樁。
除了通過圖形方式修改用地數(shù)據(jù)外,經(jīng)常使用的還有列表編輯方式直接錄入和修改用地數(shù)據(jù)。對此,本研究重載了自定義實(shí)體的List()函數(shù),選中實(shí)體后運(yùn)行List命令,彈出如圖2所示對話框,設(shè)計人員可查詢、編輯、增加、刪除、修改用地數(shù)據(jù),并自動刷新用地區(qū)域?qū)嶓w。
圖2 用地樁數(shù)據(jù)編輯
鐵路用地設(shè)計主要是處理鐵路用地區(qū)域與既有建筑物、經(jīng)濟(jì)作物及環(huán)境保護(hù)區(qū)等地理區(qū)域的關(guān)系。因此,除了用地區(qū)域自定義實(shí)體外,還需要定制各地理區(qū)域自定義實(shí)體,此類實(shí)體包括幾何屬性數(shù)據(jù)和物理屬性數(shù)據(jù)兩類。
幾何屬性數(shù)據(jù)主要是描述其幾何邊界的頂點(diǎn)數(shù)組,物理屬性則包括名稱、征地或拆遷單價、是否允許線路穿越等。采用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)對這些地理區(qū)域進(jìn)行描述,不同類型的區(qū)域采用Type變量標(biāo)記。且Type變量為整形量,允許用戶自定義和擴(kuò)展地理區(qū)域類型。
Typedef struct{
AcGePoint3dArray BorderPtArray;//幾何邊界頂點(diǎn)數(shù)組
int Type;//區(qū)域類型,包括
Cstring Name;//名稱
bool IsCanUse;//是否允許征用、拆遷
double CostPer;//如果允許征用、拆遷,每平米費(fèi)用
Cstring HatchType;//在CAD中繪制該區(qū)域時填充的圖形
…
}Geo//地理區(qū)域
與用地區(qū)域自定義實(shí)體類似,地理區(qū)域自定義實(shí)體的定制也包含上述創(chuàng)建、實(shí)時顯示、編檔、夾點(diǎn)操作、捕捉5個部分。在該自定義實(shí)體中,幾何邊界頂點(diǎn)均作為捕捉點(diǎn)和夾點(diǎn),用戶可通過夾點(diǎn)拖動的方式在AutoCAD中方便地調(diào)整區(qū)域范圍。另外,考慮到設(shè)計的便利性,加入了多段線、面域等實(shí)體轉(zhuǎn)換為地理區(qū)域?qū)嶓w的功能,用戶可在CAD圖上拾取封閉多段線、面域,再給定單價等物理屬性,便可自動生成需要的地理區(qū)域?qū)嶓w。
征地、拆遷費(fèi)用計算是鐵路用地設(shè)計中的一項主要任務(wù)。傳統(tǒng)方法主要靠人工處理,估算精度低,對于既有建筑物、經(jīng)濟(jì)作物較少的地區(qū)尚可滿足要求。對于城市或者居民區(qū)周邊,征地拆遷造價較高,必須精確計算面積。由于用地區(qū)域和既有地理區(qū)域形狀均不規(guī)則,精確計算費(fèi)時費(fèi)力,而且極易出錯。
如能由計算機(jī)自動計算征地拆遷面積,并統(tǒng)計出總造價,將顯著降低設(shè)計人員的工作強(qiáng)度,提高用地設(shè)計的準(zhǔn)確性。考慮到無論是用地區(qū)域還是既有地理區(qū)域均可能是任意復(fù)雜的多邊形。因此,要實(shí)現(xiàn)該功能,首先需要解決任意兩個復(fù)雜多邊形的交集面積計算問題。
AutoCAD中提供了兩任意形狀面域的布爾運(yùn)算功能,ObjectARX作為AutoCAD的二次開發(fā)工具,也可定義面域并進(jìn)行布爾運(yùn)算。ObjectARX提供的面域布爾運(yùn)算成熟可靠、計算精度高,直接利用可節(jié)省大量的開發(fā)工作。ObjectARX中采用AcDbRegion類來實(shí)現(xiàn)面域的功能,可采用該類的createFromCurves函數(shù)創(chuàng)建面域?qū)ο?。該函?shù)原型如下:
static Acad::ErrorStatus createFromCurves(const AcDbVoidPtrArray& curveSegments,AcDbVoidPtrArray&regions)
該函數(shù)可將直線、圓、圓弧、多段線等CAD內(nèi)部任意類型的圖形邊界組合為一個面域。其中curveSegments即為用于構(gòu)建面域的圖形指針數(shù)組,regions則為生成的面域?qū)ο蟆?/p>
用地區(qū)域生成面域時可先將用地樁逐個連接,形成封閉多段線,然后再將多段線轉(zhuǎn)換為面域。
地理區(qū)域?qū)嶓w轉(zhuǎn)換為面域的過程更加簡單,只需要遍歷幾何邊界頂點(diǎn)數(shù)組BorderPtArray,將所有頂點(diǎn)加入多段線中,最后再將多段線轉(zhuǎn)換為面域GeoRegion即可。
構(gòu)建出用地區(qū)域和地理區(qū)域面域后,便可調(diào)用AcDbRegion類的布爾求交,得到兩區(qū)域的交集,該交集的面積即為征地拆遷面積。該布爾運(yùn)算函數(shù)如下:
virtual Acad::ErrorStatus booleanOper(AcDb::BoolOperType operation,AcDbRegion*otherRegion);
參數(shù)operation為布爾運(yùn)算類型,包含有AcDb::kBoolUnite(并集)、AcDb::kBoolIntersect(交集)和 Ac-Db::kBoolSubtract(差集)3類。otherRegion為布爾操作的另一個面域,該函數(shù)將返回布爾運(yùn)算后形成的面域。
通過遍歷圖形中所有的地理區(qū)域?qū)嶓w,調(diào)用booleanOper函數(shù)進(jìn)行交集運(yùn)算,便可得到鐵路用地區(qū)域與它們的交集,獲取面積,進(jìn)而統(tǒng)計出總的征地拆遷造價。該過程實(shí)現(xiàn)關(guān)鍵代碼如下:
pBloRec->newIterator(pIter);//新建一個塊表記錄迭代器pIter
for(pIter- >start();!pIter- >done();pIter->step())//通過迭代器遍歷所有實(shí)體
{
pIter- >getEntity(pEntity,AcDb::kFor-Read);//獲取圖形上的某一實(shí)體
if(pEntity- >isKindOf(Geo::desc())//如果實(shí)體類型為自定義的地理區(qū)域
{
GeoRegion=CreateRegion(pEntity);//創(chuàng)建地理區(qū)域的面域
If(GeoRegion==NULL)//無交集,跳過該區(qū)域
continue;
IntRegion=LandRegion.booleanOper(GeoRegion);//布爾運(yùn)算求區(qū)域交集
IntRegion.getArea(Area);//獲取交集的面積
CalCost(Area,pEntity);//計算統(tǒng)計造價
…
}
}
需要注意的是:如果與用地實(shí)體相交的區(qū)域為不允許鐵路通過的禁區(qū),則應(yīng)將造價賦值為無窮大,并將該信息反饋給設(shè)計人員,通知設(shè)計人員調(diào)整設(shè)計方案;如果相交的區(qū)域為既有建筑物,則拆遷費(fèi)用應(yīng)該按整個建筑物面積計算,而不僅僅是交集的面積。
基于上述原理與方法,開發(fā)了鐵路用地設(shè)計模塊。在一些城市地鐵設(shè)計當(dāng)中,線路途經(jīng)住宅密集的城市或城市周邊,征地拆遷費(fèi)用較高,要求精確統(tǒng)計征地拆遷造價。
人工統(tǒng)計費(fèi)時費(fèi)力,而且錯誤時有發(fā)生,采用該設(shè)計模塊,設(shè)計人員可通過實(shí)體轉(zhuǎn)換命令,直接將地形圖上的既有建筑物、經(jīng)濟(jì)作物區(qū)等轉(zhuǎn)換為自定義的地理區(qū)域?qū)嶓w,鐵路用地區(qū)域、地理區(qū)域?qū)嶓w可像AutoCAD內(nèi)部實(shí)體一樣進(jìn)行對象捕捉、夾點(diǎn)拖動、數(shù)據(jù)編輯,操作便捷,符合設(shè)計習(xí)慣,在進(jìn)行用地設(shè)計過程中可自動統(tǒng)計征地拆遷數(shù)量和費(fèi)用,并對一些穿越禁區(qū)的情況發(fā)出警告。
經(jīng)對比分析,該模塊計算的費(fèi)用與人工計算結(jié)果完全一致,而計算時間可縮短數(shù)十倍甚至上百倍。
鐵路用地設(shè)計是鐵路設(shè)計的一個重要部分?;贠bjectARX自定義實(shí)體技術(shù)定制了鐵路用地區(qū)域、既有地理區(qū)域自定義實(shí)體,鐵路規(guī)劃設(shè)計人員可像操作AutoCAD自有實(shí)體一樣對其進(jìn)行對象捕捉、夾點(diǎn)拖動、數(shù)據(jù)編輯修改,方便地進(jìn)行用地設(shè)計。據(jù)此開發(fā)的用地設(shè)計模塊可自動分析鐵路用地是否占用環(huán)境保護(hù)區(qū)等禁止穿越區(qū)域,精確計算出征地面積和費(fèi)用。生產(chǎn)實(shí)踐表明,該方法符合設(shè)計習(xí)慣,保證征地費(fèi)用計算精度和速度,可顯著降低勞動強(qiáng)度,提高規(guī)劃設(shè)計人員的工作效率。
[1] 李連成.交通用地的優(yōu)化配置問題研究[D].北京:北京交通大學(xué),2013
[2] 張利華,薛重生.基于ArcGIS的鐵路用地綜合信息管理系統(tǒng)的分析與設(shè)計[J].計算機(jī)工程與設(shè)計,2005,26(3):623-626
[3] 徐文榮,李紅璇.GIS在鐵路用地的應(yīng)用與發(fā)展[J].鐵路計算機(jī)應(yīng)用,2007,16(3):23-24
[4] 彭利輝,蒲浩.道路平面線形交互式設(shè)計方法研究[J].鐵路計算機(jī)應(yīng)用,2006,15(8):7-9
[5] 楊柳,鄭健龍,聞德保.基于ObjectARX實(shí)現(xiàn)自定義回旋線實(shí)體[J].大地測量與地球動力學(xué),2013,33(5):110-115
[6] 王欣,程耀東,孟凡相.ObjectARX二次開發(fā)運(yùn)行機(jī)制及應(yīng)用研究[J].測繪科學(xué),2009,34(S2):182-185
[7] 蒲浩,宋占峰.道路路線CAD原理與方法[M].長春:吉林科學(xué)技術(shù)出版社,2005
[8] 蒲浩,宋占峰,詹振炎.公路路線設(shè)計的一體化與可視化[J].中南大學(xué)學(xué)報:自然科學(xué)版,2004,35(5):830-835