基于如何实现ObjectARX的地形图自动接边方法(2)
来源:计算机与信息技术 作者:周醉 发表于:2010-01-18 09:36 点击:次
【关健词】地形图;自动接边;ObjectARX
pWalk = p1; pWalk-rbprevious =p2;}}} p2-rbnext = NULL; pWalk = p2; 3)合并链表 (基于如何实现ObjectARX的地形图自动接边方法) 从逻辑上讲,距离最近的两个点会合并在一起。因此首先要判断多段线的端点之间
pWalk = p1;
pWalk->rbprevious =p2;}}}
p2->rbnext = NULL;
pWalk = p2;
3)合并链表(基于如何实现ObjectARX的地形图自动接边方法)
从逻辑上讲,距离最近的两个点会合并在一起。因此首先要判断多段线的端点之间哪两个点距离最近,然后将距离最近的两个点合并起来。
要拼接两条多段线有以下四种情况(如图 2):头尾-头尾合并,头尾-尾头合并,尾头-尾头合并,尾头-头尾合并。然而,如果只是将两条链表尾头拼接的话,会出现如图2所示的拼接情况。
图2 多段线合并情况
如何解决呢?头尾-头尾这种情况可以直接将链表合并,头尾-尾头这种情况先将尾头反向为头尾然后再合并。尾头反向就是将每个结点中存放的上结点地址与下结点地址进行交换。尾头-尾头这种情况将两条链表都进行反向。尾头-头尾这种情况将第一条链表反向。头尾反向的关键代码如下:
for(pRbChange ; pRbChange != NULL;pRbChange = pRbChange->rbprevious){
pWap=pRbChange;
p = pWap->rbnext;
pWap->rbnext = pWap->rbprevious;
pWap->rbprevious = p;
pRbChange=pWap;}
合并链表的关键代码如下:
while(pRbTempFirst->rbnext!=NULL){
pRbTempFirst = pRbTempFirst->rbnext;}
pRbTempFirst->rbnext = pRbSecond;
pRbSecond->rbprevious = pRbTempFirst;
链表合并之后重新绘制多段线。在有些情况下,由于两条线合并处的点在同一位置,合并链表重绘多段线之后,该多段线会出现重叠点。因此,遍历这条重新绘制的多段线,读取每个节点的坐标,将其与上个节点的坐标比较,如果坐标值相同,删除该节点。
3.2 面状实体自动接边关键技术(基于如何实现ObjectARX的地形图自动接边方法)
其实面状实体就是闭合的线状实体。如图3,将面状实体进行合并,需要考虑面状实体中哪一边为公共合并边。从图3上看,公共合并边是p3p4与p7p8。从逻辑和经验上讲,距离最近点会合并在一起。而面状实体的合并还需考虑次近距离点。
因此,首先算出面状实体之间的最近距离点(p4、p8)和次近距离点(p3、p7),然后将p4与p8之间的连接断开,将p3与p7之间的连接断开,再将p4与p7设置为多段线的头,p3和p8设置为多段线的尾,这样就将面状实体变为线状实体。最后根据线状实体自动接边技术重新构造多段线,删除重叠点,将多段线闭合。
图3 面状实体合并
公共边两点之间断开并获取新的首节点和尾节点的关键代码如下:
if(pTemp1->rbnext == pTemp2 || pTemp1->rbnext == NULL){
pTemp1->rbnext = NULL;
pTemp2->rbprevious = NULL;
firststart = pTemp2;
firstnewS = firststart;
firstnewE = pTemp1;}
3.3 属性合并关键技术
在地形图中涉及到属性合并的地理实体包括等高线、建筑物、水系线等拓扑信息。对于这类信息的属性的合并,在拼接前将原实体上的属性数据记录在数据库中,然后在新的合并后的实体生成后,再从数据库中读取相应的数据,并加载于实体的扩展数据中。
4 结论(基于如何实现ObjectARX的地形图自动接边方法)
本文所用的方法对于线状实体和面状实体的接边是切实可行的,保证了地形图在拼接过程中的准确性和高效率性。
参考文献(责任编辑:南粤论文中心)转贴于南粤论文中心: http://www.nylw.net(南粤论文中心__代写代发论文_毕业论文带写_广州职称论文代发_广州论文网)
版权声明:因本文均来自于网络,如果有版权方面侵犯,请及时联系本站删除.