關鍵字 地形圖;自動接邊;ObjectARX
摘 要 本文介紹了一種地形圖自動接邊的方法,分析了地形圖自動接邊中的關鍵技術,并在VS2002平臺下利用ObjectARX開發包進行二次開發,實現了同比例尺地形圖的自動接邊。
1 引言(基于如何實現ObjectARX的地形圖自動接邊方法)
由于各種地形圖采用分幅管理,造成各種地理要素被分割。在圖形數字化過程中,地理要素有可能發生空間錯位或者屬性錯填漏填。當導入多幅圖幅時,就可看到在一些圖幅邊緣處產生明顯的“斷裂帶”。而目前地形圖接邊工作大部分采用人工接邊,工作量大且易出錯。為提高接邊效率,本文提出了一種地形圖的接邊方法,采用ObjectARX開發包進行二次開發,實現了同比例尺地形圖的自動接邊。(基于如何實現ObjectARX的地形圖自動接邊方法)
2 同比例尺地形圖自動接邊的流程(基于如何實現ObjectARX的地形圖自動接邊方法)
2.1 自動接邊的原則
自動接邊遵循如下原則:
(1)同一種類的地理實體。
(2)錯位的距離在規定的容差范圍內。
(3)指定的屬性能夠完全匹配。
2.2 自動接邊的總體思路
(1)導入要進行合并的圖幅。(基于如何實現ObjectARX的地形圖自動接邊方法)
(2)在圖幅間繪制一條分界線。
(3)選中此分界線,構造緩沖區。利用acedSSGet("C",pt1,pt2,NULL,ssname)在指定范圍內構造選擇集。緩沖區一邊的地理實體放入第一個選擇集 ,緩沖區另一邊的地理實體放入第二個選擇集。
(4)遍歷第一個選擇集,得到的第一個實體與第二個選擇集中的所有實體進行匹配,如果符合自動接邊的原則,將兩個地理實體自動拼接并實現屬性數據的更新。
3 同比例尺地形圖自動接邊的關鍵技術
3.1 線狀實體自動接邊關鍵技術
3.1.1 線狀實體自動接邊的思路
線狀實體的合并是利用一個實體的屬性找到與其屬性相互匹配的另一個實體,然后判斷兩個線狀實體的合并點距離是否在容差范圍內,如果這個距離在容差范圍內就進行拼接,最后處理拼接處的重疊點。
3.1.2 線狀實體自動接邊的方法(基于如何實現ObjectARX的地形圖自動接邊方法)
1)構造結構體
struct buf {
AcGePoint3d Point;//存放多段線節點的坐標值
struct buf *rbprevious;//存放上一個結點的地址
struct buf *rbnext;//存放下一個結點的地址}
2)構造鏈表(基于如何實現ObjectARX的地形圖自動接邊方法)
對多段線進行鏈表的構造是從多段線的起始點開始遍歷整條多段線從而構造鏈表,見圖1。鏈表中的每個結點存放三個數據:上一個結點的地址,下一個結點的地址,本結點所對應的多段線節點的坐標值。

圖 1 構造鏈表
構造多段線鏈表的關鍵代碼如下:
if(pEnt->isKindOf(AcDbPolyline::desc())){
AcDbPolyline *pPoly = AcDbPolyline::cast(pEnt);
linetype = pPoly->linetype();
layer = pPoly->layer();
pPoly->getConstantWidth(width);
for(int I = 0;i<pPoly->numVerts();i++){
pPoly->getPointAt(i,pt);
pWalk->Point = pt;
p2 = pWalk;
if(i==0){
pRblianbiao = pWalk;
pWalk->rbprevious = NULL;
p1 = new buf;
pWalk->rbnext =p1;
pWalk = p1;
pWalk->rbprevious =p2;}
else{
p1 = new buf;