针对沉降的小范围高程点的实时修改

2015-07-04 02:41李奕洁侯金波朱俊鹏
信息周刊 2015年11期

李奕洁 侯金波 朱俊鹏

【摘 要】地面沉降是我市普遍且大面积存在的,小范围内可以认为沉降速度是相同的。据此,小范围内可以批量修改地形图的高程点属性和注记。此外,还针对旧的地形图曾人工修改数次,往往存在注记与高程点属性不一致现象。我们通过该程序省略大量人工重复性工作,批量矫正注记与高程点属性不一致。

【关键词】高程点属性;注记;矫正一致性;批量修改

1 引言

研究意义

因此,随着高程年代的启用,旧的地形图上的的高程点的属性值以及高程注记值需要随着不同高程年代的启用也需要批量的随之改变。并且保证高程注记与高程点的扩展属性值一致。

由于需要改的高程点和高程注记比较多,一般采用的方法就是手工一个一个的改,这样修改工作量比较大。并且容易漏改或者容易造成高程注记和高程点的扩展属性值的部分漏改造成注记及高程点属性值不一致的错误

生产中通常是手工修改,工作量比较大。由于在生产工作中为了工作方便,有些生产工只是需要高程注记的修改,而有些工作只是需要一部分地形图,所以造成了:部分地形图只是改变了高程注记值而没有改变高程点的属性值,高程注记与高程值不一致。

2开发平台和开发语言的选择

ObjectArx是一種崭新的开发AutoCAD应用程序的工具,以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。

3目标分析

3.1生产中遇到的问题

在实际生产中,由于以往的人工操作造成现有的图,出现两大问题:

(1)工作量大:一副地形图上往往有上百个无规则分布的高程点的属性值和相应的高程注记需要修改。

(2)准确性差:由于数据量大,而且分布无规律,只靠人眼观察修改会造成很多漏改,和重复修改,使得高程值偏高或偏低,而且不易被发现;而且一次数据修改错误,以后每次修改都是在错误基础上修改,错误会像多米诺骨牌无限传递下去, 造成不易被发现的连锁错误。

(3)属性、注记不一致:以前的作业人员大部分往往只是修改注记值,遗漏了很多属性值的修改,造成了很多点注记值与属性值的不一致。 但是随着数据入库管理的需要,高程点属性值越来越重要。这一遗留问题也需要及时解决。

4 建立模型(如图4.1)

图4.1

5程序设计

5.1程序设计

5.11对于高程注记:通过图层和属性识别高程注记,根据用户输入高程增加值,批量修改。

5.12对于高程点:以高程点为圆心一定范围内查找高程注记,如果高程注记唯一,将高程点属性按照高程注记值修改高程点属性。如果不唯一,做一个标记,以便人工修改。

5.121遇上的问题:由于每一副地形图的点和注记的疏密不同,而且点和注记相对距离因每幅图不同而不同。针对这两种情况查找范围应该因每幅图不同而不同,因此我选择由用户输入的办法。

5.122关于选区的选用:由于注记的基点在它的右下角,选用常用的以基点为起点拉一个选框,即使两实体距离再进也无法被选中,会造成许多实体的漏选,会需要很多人工补改的工作,造成很多不便。这个程序选用以确定四角点的选区方法,就会增加选中实体的概率。

5.13对于高程年代:改过的高程点和注记批量赋予一个新的高程年代并归在新的图层里。

5.2界面设计及代码

5.21修改注记部分

char adsheight[100];

if (acedGetString(Adesk::kFalse,"\n输入注记的高程增加值", adsheight)!=RTNORM)

{

for (int i=0;i

{

ads_name sent;

acedSSName(ssname, i, sent);

AcDbObjectId idObj;

AcDbEntity *pEnt;

CString Cstext;

Cstext=pText->textString();

double gaochengzhi;

double zz;

zz=moreheight;

gaochengzhi=gaochengzhi+zz;

Cstext.Format("%f",gaochengzhi);

pText->setTextString(Cstext);

pEnt->close();

}

5.22修改高程点部分

以高程点为目标筛选高程注记的设计上还有一定的不足,开始我所如果选用的筛选方法是以高程点为基点为中心拉一个方框。

显然,注记的基点在它的右下角,即使两实体距离再进也无法被选中,经过同事的即及时指出,我选用了在高程点四规定一个范围来进行选中,可以部分减少被漏选的高程点。

for (ii=0;ii

{

CString Cstext;

ads_name Lsent;

// 遍历选区内所有实体

AcDbEntity *pLLEnt;

Acad::ErrorStatus

{

AcDbText*pText;

pText=NULL;

CString abc="";

abc=pText->textString();

if (pText != NULL)

{

if (EntString==zhujituceng)

{

m=m+1; Cstext=pText->textString();

double gaochengzhi;

gaochengzhi =atof(Cstext);

point3d.z=gaochengzhi;

} }

}

}

致谢

感谢部门领导交给我此项任务的信任和鼓励,感谢组里同事给我的时间上支持,感谢测量公司、星际公司的师兄师姐给我的指导,感谢空港组同事们在应用中给我提出的不足和意见。在此无法一一列举出所有给过我帮助的人,祝大家工作顺利。

参考文献:

[1] ArcGIS VC++语言的开发帮助.

[2]李冠亿.深居简出CAD二次开发基础.2010 【www.BimCad.org】