关键字 地形图;自动接边;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;