浅谈测绘内业中的等高线批量自动连接处理_第1页
浅谈测绘内业中的等高线批量自动连接处理_第2页
浅谈测绘内业中的等高线批量自动连接处理_第3页
浅谈测绘内业中的等高线批量自动连接处理_第4页
浅谈测绘内业中的等高线批量自动连接处理_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浅谈测绘内业中的等高线批量自动连接处理摘要:针对AAutoCAAD环境下,测绘内业工工作中等高线线在遇到高程程注记、冲沟沟、陡坎等地地貌符号时产产生的断裂问问题,利用VBA编制宏命令,以一种人机机交互的方式式实现断裂等等高线的批量量自动连接处处理,极大地提高高了工作效率率。关键词:等高线线;连接;VBA在测绘内业的工工作中,需要对地图图中的地理要要素如:高程注记、独独立房屋、等等高线等进行行处理和提取取,而等高线在在地图中占有有非常重要的的位置,是对地形进进行分析的关关键,故对等高线线的处理是测测绘内业工作作的首要任务务。理想的等等高线应该是是完整的闭合合曲线,但是为了出出图的需要,等高线在遇遇到高程注记记、冲沟、陡陡坎等地貌符符号时会产生生断裂(如图1所示)。为了得到到完整的等高高线,必须将这些些被打断的各各个部分连接接起来,以便之后生生成图形的数数字高程模型型(DEM)并进行各种种分析操作。目目前断点的处处理方法主要要有基于形态态变换的断线线连接、顾及及拓扑关系的的连接方法,基于先验知知识的解决方方法等,对于不同的的断裂原因采采用不同的方方法进行处理理,更具有针对对性。根据本本次作业处理理的实际情况况,提出了选取取两组等高线线自动进行批批量连接的方方法,不仅针对性性强而且方便便可行,高效地处理理了工作中所所遇到的问题题。1、程序设计思思路正常情况下等高高线是有高程程的,这种情况处处理起来比较较简单,以高程为依依据把高程相相等的等高线线进行连接就就可以了,程序的实现现也简单易行行。但在实际际工作中有时时由于只注意意等高线的平平面位置,忽视高程的的存在,造成了一些些图中等高线线没有高程或或者高程都为为零的现象,这样处理起起来就比较复复杂。本次设设计针对这种种情况进行处处理。(1)画两条辅辅助线用栏选选方式找到与与这两条辅助助线相交的两两组需要连接接的等高线,对每组等高高线根据其交交点与辅助线线起点的距离离确定两组等等高线中应互互相连接的两两条线;(2)对这两条条线根据它们们端点的远近近距离进行判判断,把距离最近近的两点进行行连接(如图2所示)。采用这种种判断依据的的原因是:处理的断裂裂等高线中,并不都是头头尾相连的,有些是头头头相连或尾尾尾相连的,只能根据端端点距离的远远近确定要连连接的两点。在本次程序设计计中需要处理理的等高线有有两种线型,分别是2维多段线LWPOLLYLINEE和3维多段线POLY--LINE,,处理方法大大致相同,下面分别进进行介绍。2、等高线的连连接处理AutoCADD图形中每个个图元实体都都有一个属性性集,用于记录该该图元实体的的各种属性。修修改图形中的的文字属性,如图层、样样式、颜色等等,实际上是改改变文字图元元实体的属性性集。要改变变图元实体,首先要选择择图元实体,形成图元实实体选择集。提示用户在图形形窗口中选择择实体,用Utiliity对象的GetPooint方法获取鼠鼠标按下的两两点,并通过这两两点画一条辅辅助线line11:p11=TThisDrrawingg.Utillity.GGetPoiint(,"输入第一条条线的第一点点:")p12=TThisDrrawingg.Utillity.GGetPoiint(p11,"输入第一条条线的第二点点:")Setlinne1=ThisDDrawinng.ModdelSpaace.AAddLinne(p111,p12))用同样的方法画画第二条辅助助线line2确定其两个个端点p21、p22,分别创建建两个选择集集:SetssettObj1==ThissDrawiing.SSelecttionSeets.Addd("sss1")SetsseetObj22=ThhisDraawing..SeleectionnSets..Add("sss2")由于地图中不仅仅仅只包括等等高线还有很很多其他的地地理要素,如铁路、房房屋等,在画辅助线线的过程中可可能会包含别别的地理要素素和要处理的的等高线无关关,所以要对选择择集进行过滤滤处理,将符合条件件的等高线放放置到创建的的结果集中,代码如下:gpCode((0)=0dataVallue(0))="LLWPOLYYLINE""'确定等高线线的线型gpCode((1)=8dataVallue(1))="EE"'确定等高线线所在的图层层gpCode((2)=62dataVallue(2))=7'确定绘制的的等高线颜色色groupCoode=gpCoddedataCodde=ddataVaaluemode=acSellectioonSetFFence'确定选择方方式为栏选把符合条件的线线加入到选择择集中,其中pointts为数组,分分别存放了p11、p12点的坐标及p21、p22点的坐标:ssetObjj1.SeelectBByPolyygonmmode,pointts,grroupCoode,daataCoddessetObjj2.SeelectBByPolyygonmmode,pointts,grroupCoode,daataCodde将已选中的等高高线高亮显示示并刷新:ssetObjj1.HigghlighhtTrueessetObjj1.Upddate在人为选择的过过程中可能出出现两个选择择集中的等高高线数量不一一致,遇到这种情情况以数量少少的为准进行行连接:IfssettObj1..Countt>sseetObj22.CounntThenniCount==ssettObj2..CounttElseiCount==ssettObj1..CounttEndIf两个选择集中分分别存放有很很多条等高线线,按照等高线线在选择集中中的存放次序序分别找到互互相匹配的两两条线。每条条等高线都有有两个端点,不仅要确定定哪两条线是是需要连接的的,还要确定这这两条线的哪哪两个点需要要连接,具体办法是是用两点间的的距离公式求求出与距离最最近的点,这两个点就就是要连接的的点。基于上上述思想,首先找到两两条等高线的的4个端点:ps1=pplineLLW1.Cooordinnate(00)pe1=pplineLLW1.Cooordinnate(nn1-11)ps2=pplineLLW2.Cooordinnate(00)pe2=pplineLLW2.Cooordinnate(nn2-11)计算距离:dist1=Sqr(((ps1(00)-ppe2(0)))^22+(pps1(1))-pe22(1))^2)dist2=Sqr(((ps1(00)-pps2(0)))^22+(pps1(1))-ps22(1))^2)dist3==Sqr(((pe1((0)-ps2(00))^22+(ppe1(1))-ps22(1))^2)dist4==Sqr(((pe1((0)-pe2(00))^22+(ppe1(1))-pe22(1))^2)找到四个距离的的最小值,每一段最小小距离代表了了图中4种不同的情情况:当dist1为为最小时,说明第一条条等高线应接接于第二条等等高线之后,用AddVeertex方法插入节节点,在plineeLW2的末端点后后增加一个节节点将plineeLW1上的节点逐逐一插入进来来,这样就实现现了plineeLW2与plineeLW1的连接,实际是从增增加的节点开开始按照plineeLW1各节点所在在的位置将plineeLW1重新画了一一遍。画好后后改变一下颜颜色,并将原来被被重画的线删删除。具体代代码如下:Fork=00Tonn1-11index==(UBoound(pplineLLW2.Cooordinnates))+1))/2plineLWW2.AdddVerteexinddex,pplineLLW1.Cooordinnate(kk)Next其中,n1是pplineLLW1上节点的个个数,indeex是plineeLW2上节点的个个数。UBounnd确定数组的的最大下标,由于是2维多段线,数组的坐标标又是从零开开始计算的,故要得到等等高线上节点点的个数n,需要将UBounnd取得的数值值加1并除以2。当dist2为为最小时,说明两条等等高线的起点点相距最近,由于AddVeertex方法不能在在起点插入节节点,故需要将其其中一条线按按照反方向重重画一遍,然后将另一一条线的各节节点插入到这这条新画的线线中,改变新画线线的颜色,并将原来被被重画的两条条线都删除掉掉。j=0Fork=n11-1To0Step-1p=pliineLW11.Coorrdinatte(k)point(jj*2)=p(00):pooint(jj*2++1)==p(1))j=j+1NextSetplLLW1=ThhisDraawing..ModellSpacee.AddLLight--WeighhtPolyyline((pointt)plLW1.layerr="EE"……当dist3为为最小时,说明第二条条等高线应接接于第一条等等高线之后,这种情况可可以从plineeLW1末端点开始始逐一将plineeLW2上各节点插插入进来。最最后将plineeLW2删除。当dist4为为最小时,两条等高线线的末端点相相距最近,这时可将第第二条等高线线接于第一条条等高线之后后,也可将第一一条等高线接接于第二条等等高线之后。AddVeertex方法在加节节点的过程中中对节点的添添加顺序没有有要求,也就是说先先加被连接等等高线的起点点与先加被连连接等高线的的末端点可以以达到相同的的效果。最后后将被连接的的那条等高线线删除。在做完前面4种种情况的处理理后,便完成了2维等高线的的连接,连接后的效效果如图3所示。图3连接处理理后的等高线线图需要说明的是::在计算机屏屏幕上看到的的只是一个图图幅的某一部部分,所以在地图图中屏幕可见见的区域里选选择等高线的的时候,在地图中屏屏幕不可见的的区域里可能能会有距离更更近的两点存存在,如图4-1所示。假设设图中框内为为不可见区域域,那么在可见见区域选择两两条需要连接接的等高线时时,会发现连连接后的效果果如图4-2所示。本程程序自动找到到两条等高线线距离最近的的两个端点,使它们即使使在不可见的的区域也同样样被连接起来来,这样省去了了调整地图屏屏幕可见区域域范围的麻烦烦。再一次运运行程序就会会将可见区域域未连接的等等高线连起来来。以上处理的是图图幅内不闭合合等高线的情情况,如果是处理理图幅内闭合合的等高线,那么两个选选择集所选择择的就是同一一条或同一组组等高线。由由于同一条等等高线具有相相同的句柄,可以以句柄柄属性作为判判断条件,再把它们的的起点用AddVeertex方法插入到到末端点处,用plineeLW1.AAddVerr-texindexx,pliineLW22.Coorrdinatte(0)来完成等高高线的闭合。图4-1处理理前效果图图4-2处理后效效果图3、多段线的连连接处理以上详细介绍了了2维多段线的的处理方法,3维多段线和2维多段线在在处理方式上上有很多相同同点,但也有部分分区别。首先先,在做过滤的的时候需要确确定为3维多段线的的线型。其次次,Polyyline上的每个节节点都有x、y、z三个方向的的坐标,而LWPollylinee上的每个节节点只有x、y两个方向坐坐标。故在处处理Polylline线型的等高高线时要将Ubounnd取得的数值值加1上并除以3。n=(UUBoundd(plinne3d.Coorddi-nattes)++1)//3。最后需要要说明的是3维多段线没没有ad-dVVertexx方法,取而代之的的是AppenndVertte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论