




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅谈测绘内业中的等高线批量自动连接处理摘要:针对AutoCAD环境下,测绘内业工作中等高线在遇到高程注记、冲沟、陡坎等地貌符号时产生的断裂问题,利用VBA编制宏命令,以一种人机交互的方式实现断裂等高线的批量自动连接处理,极大地提高了工作效率。关键词:等高线;连接;VBA在测绘内业的工作中,需要对地图中的地理要素如:高程注记、独立房屋、等高线等进行处理和提取,而等高线在地图中占有非常重要的位置,是对地形进行分析的关键,故对等高线的处理是测绘内业工作的首要任务。理想的等高线应该是完整的闭合曲线,但是为了出图的需要,等高线在遇到高程注记、冲沟、陡坎等地貌符号时会产生断裂(如图1所示)。为了得到完整的等高线,必须将这些被打断的各个部分连接起来,以便之后生成图形的数字高程模型(DEM)并进行各种分析操作。目前断点的处理方法主要有基于形态变换的断线连接、顾及拓扑关系的连接方法,基于先验知识的解决方法等,对于不同的断裂原因采用不同的方法进行处理,更具有针对性。根据本次作业处理的实际情况,提出了选取两组等高线自动进行批量连接的方法,不仅针对性强而且方便可行,高效地处理了工作中所遇到的问题。1、程序设计思路正常情况下等高线是有高程的,这种情况处理起来比较简单,以高程为依据把高程相等的等高线进行连接就可以了,程序的实现也简单易行。但在实际工作中有时由于只注意等高线的平面位置,忽视高程的存在,造成了一些图中等高线没有高程或者高程都为零的现象,这样处理起来就比较复杂。本次设计针对这种情况进行处理。(1)画两条辅助线用栏选方式找到与这两条辅助线相交的两组需要连接的等高线,对每组等高线根据其交点与辅助线起点的距离确定两组等高线中应互相连接的两条线;(2)对这两条线根据它们端点的远近距离进行判断,把距离最近的两点进行连接(如图2所示)。采用这种判断依据的原因是:处理的断裂等高线中,并不都是头尾相连的,有些是头头相连或尾尾相连的,只能根据端点距离的远近确定要连接的两点。在本次程序设计中需要处理的等高线有两种线型,分别是2维多段线LWPOLYLINE和3维多段线POLY-LINE,处理方法大致相同,下面分别进行介绍。2、等高线的连接处理AutoCAD图形中每个图元实体都有一个属性集,用于记录该图元实体的各种属性。修改图形中的文字属性,如图层、样式、颜色等,实际上是改变文字图元实体的属性集。要改变图元实体,首先要选择图元实体,形成图元实体选择集。提示用户在图形窗口中选择实体,用Utility对象的GetPoint方法获取鼠标按下的两点,并通过这两点画一条辅助线line1:p11=ThisDrawing.Utility.GetPoint(,"输入第一条线的第一点:")p12=ThisDrawing.Utility.GetPoint(p1,"输入第一条线的第二点:")Setline1=ThisDrawing.ModelSpace.AddLine(p11,p12)用同样的方法画第二条辅助线line2确定其两个端点p21、p22,分别创建两个选择集:SetssetObj1=ThisDrawing.SelectionSets.Add("ss1")SetssetObj2=ThisDrawing.SelectionSets.Add("ss2")由于地图中不仅仅只包括等高线还有很多其他的地理要素,如铁路、房屋等,在画辅助线的过程中可能会包含别的地理要素和要处理的等高线无关,所以要对选择集进行过滤处理,将符合条件的等高线放置到创建的结果集中,代码如下:gpCode(0)=0dataValue(0)="LWPOLYLINE"'确定等高线的线型gpCode(1)=8dataValue(1)="E"'确定等高线所在的图层gpCode(2)=62dataValue(2)=7'确定绘制的等高线颜色groupCode=gpCodedataCode=dataValuemode=acSelectionSetFence'确定选择方式为栏选把符合条件的线加入到选择集中,其中points为数组,分别存放了p11、p12点的坐标及p21、p22点的坐标:ssetObj1.SelectByPolygonmode,points,groupCode,dataCodessetObj2.SelectByPolygonmode,points,groupCode,dataCode将已选中的等高线高亮显示并刷新:ssetObj1.HighlightTruessetObj1.Update在人为选择的过程中可能出现两个选择集中的等高线数量不一致,遇到这种情况以数量少的为准进行连接:IfssetObj1.Count>ssetObj2.CountTheniCount=ssetObj2.CountElseiCount=ssetObj1.CountEndIf两个选择集中分别存放有很多条等高线,按照等高线在选择集中的存放次序分别找到互相匹配的两条线。每条等高线都有两个端点,不仅要确定哪两条线是需要连接的,还要确定这两条线的哪两个点需要连接,具体办法是用两点间的距离公式求出与距离最近的点,这两个点就是要连接的点。基于上述思想,首先找到两条等高线的4个端点:ps1=plineLW1.Coordinate(0)pe1=plineLW1.Coordinate(n1-1)ps2=plineLW2.Coordinate(0)pe2=plineLW2.Coordinate(n2-1)计算距离:dist1=Sqr((ps1(0)-pe2(0))^2+(ps1(1)-pe2(1))^2)dist2=Sqr((ps1(0)-ps2(0))^2+(ps1(1)-ps2(1))^2)dist3=Sqr((pe1(0)-ps2(0))^2+(pe1(1)-ps2(1))^2)dist4=Sqr((pe1(0)-pe2(0))^2+(pe1(1)-pe2(1))^2)找到四个距离的最小值,每一段最小距离代表了图中4种不同的情况:当dist1为最小时,说明第一条等高线应接于第二条等高线之后,用AddVertex方法插入节点,在plineLW2的末端点后增加一个节点将plineLW1上的节点逐一插入进来,这样就实现了plineLW2与plineLW1的连接,实际是从增加的节点开始按照plineLW1各节点所在的位置将plineLW1重新画了一遍。画好后改变一下颜色,并将原来被重画的线删除。具体代码如下:Fork=0Ton1-1index=(UBound(plineLW2.Coordinates)+1)/2plineLW2.AddVertexindex,plineLW1.Coordinate(k)Next其中,n1是plineLW1上节点的个数,index是plineLW2上节点的个数。UBound确定数组的最大下标,由于是2维多段线,数组的坐标又是从零开始计算的,故要得到等高线上节点的个数n,需要将UBound取得的数值加1并除以2。当dist2为最小时,说明两条等高线的起点相距最近,由于AddVertex方法不能在起点插入节点,故需要将其中一条线按照反方向重画一遍,然后将另一条线的各节点插入到这条新画的线中,改变新画线的颜色,并将原来被重画的两条线都删除掉。j=0Fork=n1-1To0Step-1p=plineLW1.Coordinate(k)point(j*2)=p(0):point(j*2+1)=p(1)j=j+1NextSetplLW1=ThisDrawing.ModelSpace.AddLight-WeightPolyline(point)plLW1.layer="E"……当dist3为最小时,说明第二条等高线应接于第一条等高线之后,这种情况可以从plineLW1末端点开始逐一将plineLW2上各节点插入进来。最后将plineLW2删除。当dist4为最小时,两条等高线的末端点相距最近,这时可将第二条等高线接于第一条等高线之后,也可将第一条等高线接于第二条等高线之后。AddVertex方法在加节点的过程中对节点的添加顺序没有要求,也就是说先加被连接等高线的起点与先加被连接等高线的末端点可以达到相同的效果。最后将被连接的那条等高线删除。在做完前面4种情况的处理后,便完成了2维等高线的连接,连接后的效果如图3所示。图3连接处理后的等高线图需要说明的是:在计算机屏幕上看到的只是一个图幅的某一部分,所以在地图中屏幕可见的区域里选择等高线的时候,在地图中屏幕不可见的区域里可能会有距离更近的两点存在,如图4-1所示。假设图中框内为不可见区域,那么在可见区域选择两条需要连接的等高线时,会发现连接后的效果如图4-2所示。本程序自动找到两条等高线距离最近的两个端点,使它们即使在不可见的区域也同样被连接起来,这样省去了调整地图屏幕可见区域范围的麻烦。再一次运行程序就会将可见区域未连接的等高线连起来。以上处理的是图幅内不闭合等高线的情况,如果是处理图幅内闭合的等高线,那么两个选择集所选择的就是同一条或同一组等高线。由于同一条等高线具有相同的句柄,可以以句柄属性作为判断条件,再把它们的起点用AddVertex方法插入到末端点处,用plineLW1.AddVer-texindex,plineLW2.Coordinate(0)来完成等高线的闭合。图4-1处理前效果图图4-2处理后效果图3、多段线的连接处理以上详细介绍了2维多段线的处理方法,3维多段线和2维多段线在处理方式上有很多相同点,但也有部分区别。首先,在做过滤的时候需要确定为3维多段线的线型。其次,Polyline上的每个节点都有x、y、z三个方向的坐标,而LWPolyline上的每个节点只有x、y两个方向坐标。故在处理Polyline线型的等高线时要将Ubound取得的数值加1上并除以3。n=(UBound(pline3d.Coordi-nates)+1)/3。最后需要说明的是3维多段线没有ad-dVertex方法,取而代之的是AppendVertex,同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2013成考试题及答案
- 要认真准备发言材料
- 2025合同法 我国合同法是否适用于中外合作项目
- FXR-antagonist-2-hydrochloride-生命科学试剂-MCE
- (高清版)DB13∕T 2987-2019 滨海盐碱地日光温室草莓栽培技术规程
- 2025年安徽省滁州市定远县中考中考三模数学试题
- 三视图教学设计
- 数字媒体设计技术习题集
- 环境科学环境工程学试题库
- 假期旅游与出勤证明函(8篇)
- 国开期末考试《城市管理学》机考试题及答案(第11套)
- 新疆维吾尔自治区建筑工程补充预算定额说明
- OpenStack云计算平台实战课件(完整版)
- FIDIC施工合同条件(红皮书)
- 学前儿童语言教育课件精品ppt
- CATIA实用入门教程ppt课件(124页PPT)
- 机械原理课程设计--自动打印机
- x8线切割编控系统使用说明书v16
- (完整版)电大法律专业专科毕业论文
- 打磨作业指导书
- 电感气隙计算方法
评论
0/150
提交评论