冀幼平
(中鐵國際集團有限公司,北京 100039)
鐵路建設必然要占用土地資源,改變原有土地的使用功能,并對沿線范圍內的經濟、環(huán)境和居民生活產生重要影響。合理用地可充分利用土地資源,使沿線土地升值,使未被利用土地充分發(fā)揮其功能,帶動沿線經濟發(fā)展,改善周邊居民生活環(huán)境,否則,將導致土地資源浪費,破壞生態(tài)環(huán)境,甚至影響沿線居民基本生活和經濟產業(yè)布局[1]。
在規(guī)劃階段,用地設計主要是使公路盡量繞避不良地質地段,以減少工程造價;遠離環(huán)境保護區(qū)域,以實現人與環(huán)境的和諧發(fā)展;靠近重要經濟據點,以促進沿線經濟發(fā)展;并盡可能的少侵入居民聚集地,以避免大量的居民拆遷。在設計階段,用地設計的主要任務是檢查設計用地是否完全滿足規(guī)劃階段的要求,根據實際需要對用地進行適當調整,盡可能精確地計算征地數量和費用[2-3]。
傳統的用地設計主要是依靠人工在地形圖上進行分析計算。該方法效率低、工作量大、易出錯,用地面積和費用計算精度低。對此,提出一種基于Object-ARX自定義實體的鐵路用地輔助設計方法。首先定制鐵路用地區(qū)域和各類既有地理區(qū)域(包括:既有建筑物、經濟作物區(qū)、環(huán)境保護區(qū)等)的自定義實體,用戶可像操作AutoCAD自有的直線、圓等實體一樣,方便地對這些自定義實體進行編輯、修改、拖動;然后設計了任意多邊形之間的重疊面積算法,并在此基礎上實現了征地、拆遷面積和費用的自動統計。該方法能輔助設計人員進行用地分析,顯著降低設計人員的工作強度,提高設計效率。
用地區(qū)域是由鐵路路基地段左右側用地樁所構成的封閉多邊形。將左右側的相鄰用地樁分別連接起來,并在橋隧頭尾處封閉起來,即可形成用地區(qū)域。因而,可采用用地樁數組來表示用地區(qū)域。
在進行用地設計的過程中,設計人員通常習慣給定各樁號里程Mi及樁號左右側用地寬WLi和WRi的方式來表示用地樁。基于這種設計習慣,考慮到繪圖和計算中都需要反復使用到該樁號處的線路中線坐標和用地樁坐標,本文設計的用地樁數據結構如下:
typedef struct
{
double Millage;//用地樁里程Mi
double Cen_N,Cen_E;//線路中線經度距坐標Ni,Ei
double Alfa;//該樁號的坐標方位角αi
double Left_Wide,Right_Wide;//左、右側用地寬 WLi,WRi
double Left_N,Left_E;//左、右側用地樁的經度距坐標 NLi,ELi
double Right_N,Right_E;//右側用地樁的經度距坐標 NRi,ERi
}LandStation//用地樁Si
根據平面交點坐標、曲線半徑、緩和曲線長等設計參數,可以快速計算出Mi里程處的線路中線坐標(Ni,Ei)和方位角 αi[4-5]。計算出這 3 個參數后,左、右側用地樁坐標可按公式(1)計算

AutoCAD是當前計算機輔助設計中廣泛使用的一個平臺[6]。因此,本鐵路用地設計系統選擇在該平臺上進行開發(fā)。ObjectARX作為AutoCAD的二次開發(fā)工具,不僅提供了AutoCAD自有的直線、圓、多段線等圖形實體,還允許用戶對其擴展,根據需要定制自定義圖形實體,用戶可像操作直線、圓等圖形實體一樣方便地對自定義實體進行數據編輯、對象捕捉、夾點拖動等操作[7,8]。
①從實體基類AcDbEntity派生出用地區(qū)域自定義實體類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程序初始化時進行用地區(qū)域類的初始化
Land::rxInit();
acrxBuildClassHierarchy();
⑤在ARX程序卸載時清除自定義用地區(qū)域類
deleteAcRxClass(Land::desc())。
自定義實體在AutoCAD中的顯示由以下3個函數完成:
Adesk::Boolean worldDraw(AcGiWorldDraw*pWd);與視圖無關的實體圖形繪制
void viewportDraw(AcGiViewportDraw*PVd);與視圖相關的實體圖形繪制
Adesk::Uint32 setAttributes(AcGiDrawableTraits*pDt);初始化實體顏色、層和線型等屬性
在自定義實體類中重載這些函數,便可實現圖形的繪制。上述3個函數中worldDraw()函數必須在自定義實體類中重載,其余2個可根據需要選擇。
用地區(qū)域自定義實體需要具備保存、復制等操作功能,必須對該自定義實體進行編檔。在用地區(qū)域實體類中重載dwgOut()和dxfOut()的兩個函數,可分別實現DWG、DXF文件中實體的編出;dwgIn()和dxfIn()則實現實體的編入。編出、編入函數的實現首先調用assertWriteEnabled()和 assertReadEnabled(),然后調用readItem()和writeItem(),按預定順序讀、寫該實體的屬性數據。
為使用地區(qū)域實體的修改操作更加方便,為其定義了夾點和夾點拖動操作,如圖1所示。當該實體被選中后,用地樁將突出顯示,并且可以實時拖動這些用地樁,由計算機自動刷新用地數據。

圖1 用地樁夾點拖動
為便于設計人員獲取用地樁,可將這些用地樁點作為該自定義實體的捕捉點。實現該過程可重載getOsnapPoints()函數,并在該函數中遍歷所有用地樁,將其加入捕捉點數組snapPoints中。
通過上述過程便完成了鐵路用地區(qū)域自定義實體的定制,設計人員可以像操作AutoCAD自有的直線、多段線、圓一樣,方便地對用地區(qū)域進行修改、捕捉、實時動態(tài)拖動用地樁。
除了通過圖形方式修改用地數據外,經常使用的還有列表編輯方式直接錄入和修改用地數據。對此,本研究重載了自定義實體的List()函數,選中實體后運行List命令,彈出如圖2所示對話框,設計人員可查詢、編輯、增加、刪除、修改用地數據,并自動刷新用地區(qū)域實體。

圖2 用地樁數據編輯
鐵路用地設計主要是處理鐵路用地區(qū)域與既有建筑物、經濟作物及環(huán)境保護區(qū)等地理區(qū)域的關系。因此,除了用地區(qū)域自定義實體外,還需要定制各地理區(qū)域自定義實體,此類實體包括幾何屬性數據和物理屬性數據兩類。
幾何屬性數據主要是描述其幾何邊界的頂點數組,物理屬性則包括名稱、征地或拆遷單價、是否允許線路穿越等。采用統一的數據結構對這些地理區(qū)域進行描述,不同類型的區(qū)域采用Type變量標記。且Type變量為整形量,允許用戶自定義和擴展地理區(qū)域類型。
Typedef struct{
AcGePoint3dArray BorderPtArray;//幾何邊界頂點數組
int Type;//區(qū)域類型,包括
Cstring Name;//名稱
bool IsCanUse;//是否允許征用、拆遷
double CostPer;//如果允許征用、拆遷,每平米費用
Cstring HatchType;//在CAD中繪制該區(qū)域時填充的圖形
…
}Geo//地理區(qū)域
與用地區(qū)域自定義實體類似,地理區(qū)域自定義實體的定制也包含上述創(chuàng)建、實時顯示、編檔、夾點操作、捕捉5個部分。在該自定義實體中,幾何邊界頂點均作為捕捉點和夾點,用戶可通過夾點拖動的方式在AutoCAD中方便地調整區(qū)域范圍。另外,考慮到設計的便利性,加入了多段線、面域等實體轉換為地理區(qū)域實體的功能,用戶可在CAD圖上拾取封閉多段線、面域,再給定單價等物理屬性,便可自動生成需要的地理區(qū)域實體。
征地、拆遷費用計算是鐵路用地設計中的一項主要任務。傳統方法主要靠人工處理,估算精度低,對于既有建筑物、經濟作物較少的地區(qū)尚可滿足要求。對于城市或者居民區(qū)周邊,征地拆遷造價較高,必須精確計算面積。由于用地區(qū)域和既有地理區(qū)域形狀均不規(guī)則,精確計算費時費力,而且極易出錯。
如能由計算機自動計算征地拆遷面積,并統計出總造價,將顯著降低設計人員的工作強度,提高用地設計的準確性。考慮到無論是用地區(qū)域還是既有地理區(qū)域均可能是任意復雜的多邊形。因此,要實現該功能,首先需要解決任意兩個復雜多邊形的交集面積計算問題。
AutoCAD中提供了兩任意形狀面域的布爾運算功能,ObjectARX作為AutoCAD的二次開發(fā)工具,也可定義面域并進行布爾運算。ObjectARX提供的面域布爾運算成熟可靠、計算精度高,直接利用可節(jié)省大量的開發(fā)工作。ObjectARX中采用AcDbRegion類來實現面域的功能,可采用該類的createFromCurves函數創(chuàng)建面域對象。該函數原型如下:
static Acad::ErrorStatus createFromCurves(const AcDbVoidPtrArray& curveSegments,AcDbVoidPtrArray&regions)
該函數可將直線、圓、圓弧、多段線等CAD內部任意類型的圖形邊界組合為一個面域。其中curveSegments即為用于構建面域的圖形指針數組,regions則為生成的面域對象。
用地區(qū)域生成面域時可先將用地樁逐個連接,形成封閉多段線,然后再將多段線轉換為面域。
地理區(qū)域實體轉換為面域的過程更加簡單,只需要遍歷幾何邊界頂點數組BorderPtArray,將所有頂點加入多段線中,最后再將多段線轉換為面域GeoRegion即可。
構建出用地區(qū)域和地理區(qū)域面域后,便可調用AcDbRegion類的布爾求交,得到兩區(qū)域的交集,該交集的面積即為征地拆遷面積。該布爾運算函數如下:
virtual Acad::ErrorStatus booleanOper(AcDb::BoolOperType operation,AcDbRegion*otherRegion);
參數operation為布爾運算類型,包含有AcDb::kBoolUnite(并集)、AcDb::kBoolIntersect(交集)和 Ac-Db::kBoolSubtract(差集)3類。otherRegion為布爾操作的另一個面域,該函數將返回布爾運算后形成的面域。
通過遍歷圖形中所有的地理區(qū)域實體,調用booleanOper函數進行交集運算,便可得到鐵路用地區(qū)域與它們的交集,獲取面積,進而統計出總的征地拆遷造價。該過程實現關鍵代碼如下:
pBloRec->newIterator(pIter);//新建一個塊表記錄迭代器pIter
for(pIter- >start();!pIter- >done();pIter->step())//通過迭代器遍歷所有實體
{
pIter- >getEntity(pEntity,AcDb::kFor-Read);//獲取圖形上的某一實體
if(pEntity- >isKindOf(Geo::desc())//如果實體類型為自定義的地理區(qū)域
{
GeoRegion=CreateRegion(pEntity);//創(chuàng)建地理區(qū)域的面域
If(GeoRegion==NULL)//無交集,跳過該區(qū)域
continue;
IntRegion=LandRegion.booleanOper(GeoRegion);//布爾運算求區(qū)域交集
IntRegion.getArea(Area);//獲取交集的面積
CalCost(Area,pEntity);//計算統計造價
…
}
}
需要注意的是:如果與用地實體相交的區(qū)域為不允許鐵路通過的禁區(qū),則應將造價賦值為無窮大,并將該信息反饋給設計人員,通知設計人員調整設計方案;如果相交的區(qū)域為既有建筑物,則拆遷費用應該按整個建筑物面積計算,而不僅僅是交集的面積。
基于上述原理與方法,開發(fā)了鐵路用地設計模塊。在一些城市地鐵設計當中,線路途經住宅密集的城市或城市周邊,征地拆遷費用較高,要求精確統計征地拆遷造價。
人工統計費時費力,而且錯誤時有發(fā)生,采用該設計模塊,設計人員可通過實體轉換命令,直接將地形圖上的既有建筑物、經濟作物區(qū)等轉換為自定義的地理區(qū)域實體,鐵路用地區(qū)域、地理區(qū)域實體可像AutoCAD內部實體一樣進行對象捕捉、夾點拖動、數據編輯,操作便捷,符合設計習慣,在進行用地設計過程中可自動統計征地拆遷數量和費用,并對一些穿越禁區(qū)的情況發(fā)出警告。
經對比分析,該模塊計算的費用與人工計算結果完全一致,而計算時間可縮短數十倍甚至上百倍。
鐵路用地設計是鐵路設計的一個重要部分。基于ObjectARX自定義實體技術定制了鐵路用地區(qū)域、既有地理區(qū)域自定義實體,鐵路規(guī)劃設計人員可像操作AutoCAD自有實體一樣對其進行對象捕捉、夾點拖動、數據編輯修改,方便地進行用地設計。據此開發(fā)的用地設計模塊可自動分析鐵路用地是否占用環(huán)境保護區(qū)等禁止穿越區(qū)域,精確計算出征地面積和費用。生產實踐表明,該方法符合設計習慣,保證征地費用計算精度和速度,可顯著降低勞動強度,提高規(guī)劃設計人員的工作效率。
[1] 李連成.交通用地的優(yōu)化配置問題研究[D].北京:北京交通大學,2013
[2] 張利華,薛重生.基于ArcGIS的鐵路用地綜合信息管理系統的分析與設計[J].計算機工程與設計,2005,26(3):623-626
[3] 徐文榮,李紅璇.GIS在鐵路用地的應用與發(fā)展[J].鐵路計算機應用,2007,16(3):23-24
[4] 彭利輝,蒲浩.道路平面線形交互式設計方法研究[J].鐵路計算機應用,2006,15(8):7-9
[5] 楊柳,鄭健龍,聞德保.基于ObjectARX實現自定義回旋線實體[J].大地測量與地球動力學,2013,33(5):110-115
[6] 王欣,程耀東,孟凡相.ObjectARX二次開發(fā)運行機制及應用研究[J].測繪科學,2009,34(S2):182-185
[7] 蒲浩,宋占峰.道路路線CAD原理與方法[M].長春:吉林科學技術出版社,2005
[8] 蒲浩,宋占峰,詹振炎.公路路線設計的一體化與可視化[J].中南大學學報:自然科學版,2004,35(5):830-835