基于ObjectARX的图幅自动接边算法的实现.doc

上传人:99****p 文档编号:1432596 上传时间:2019-02-27 格式:DOC 页数:12 大小:35.50KB
下载 相关 举报
基于ObjectARX的图幅自动接边算法的实现.doc_第1页
第1页 / 共12页
基于ObjectARX的图幅自动接边算法的实现.doc_第2页
第2页 / 共12页
基于ObjectARX的图幅自动接边算法的实现.doc_第3页
第3页 / 共12页
基于ObjectARX的图幅自动接边算法的实现.doc_第4页
第4页 / 共12页
基于ObjectARX的图幅自动接边算法的实现.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、基于 ObjectARX 的图幅自动接边算法的实现摘要:地理信息系统中许多图形信息是通过已有图形数字化而来,这样不可避免地存在图幅间图元的接边问题。本文利用 C#语言调用ObjectARX 托管封装类进行编程,建立 AutoCAD 接边命令,在 AutoCAD 环境下调用接边命令实现自动接边,提高数字化成图的效率和数字化地图的精度。 关键词:数字地图;自动接边;接边要素;ObjectARX Abstract: many of the geographic information system graph information is through the existing digital g

2、raphics, and this will inevitably exists between the map on the edge problems figure yuan. This paper using c # ObjectARX calls for programming of hosting package, set up by the AutoCAD commands, in AutoCAD environment with the command realize cut by automatic picking sides, improve the efficiency o

3、f the digital mapping and the precision of the digital map. Keywords: digital map; Automatic picking edge; Meet edge elements; ObjectARX 中图分类号:G255.4 文献标识码:A 文章编号: 0 前言 随着社会信息化发展和计算机技术日益深入应用,各种比例尺地图都采用计算机存储。地理信息系统中的很多图形信息、空间地理数据都来源于地形图,由于各种比例尺地图采用分幅管理,数字化过程中相邻图幅边界的几何位置与属性难免会出现不吻合,因此两幅相邻的地图之间就存在着接边问题

4、。在传统的手工成图方法中,接边是一项很重要的工作,在数字化测图的今天,接边问题仍然存在,特别是在已有地图的数字化过程中,接边工作量占整个图形编辑工作量 20%30%。如果能自动、高效完成图幅的接边,在工作效率方面,能尽可能少的在用户干预下实现接边工作的自动化,使处理效率大幅度提高。在数据处理方面,能通过良好的算法,减少边界处的图形误差,提高基础数据质量。 1 常用的地图接边方法 1.1 平均法 平均法是取图边两边待接点的坐标均值作为接边后的点的坐标,该方法简单易行,适用于接边误差在精度允许范围内的各种直线、多义线类的接边处理,容易实现接边的全自动批量处理。如图 1-1 所示。 图 1-1 平均

5、法接边 Fig.1-1 Average edge matching 1.2 强制法 强制法是把一条待接边的待接点强制附和到另一条待接边的待接点上,该方法主要用于用户能明显判断出哪一条待接边比另一条待接边更准确、可靠,适合交互式的接边处理。如图 1-2 所示。 图 1-2 强制法接边 Fig.1-2 Mandatory edge matching 1.3 优化法 无论采用了平均法还是强制法,在边界处都要产生一个拐点,如果测图无错误,此拐角应很小。但是如果待接边明显是一条直线边的话(如建筑物、直线道路、围墙等) ,这个很小的拐角也影响图形的美观,因此我们不但要在图边线上把两个点接在一起,还要考虑到

6、接边后的图边两端线段要在一条直线上,既要共点,也要共线。这种方法就叫优化法。首先找出两个待接点 Pl 和 P2 以及它们的前一点 P1和 P2,由P1和 P2这两个点连线与边界线求出一个并点 P0,用此交点 P0 的坐标分别替换原来的待接点坐标。如图 1-3 所示。 图 1-3 优化法接边 Fig.1-3 Appropriate edge matching 以上三种常用接边方法各有优缺点,可根据图形的实际情况来分别采用1。 2 图幅自动接边算法设计 图 2-1 数字接边处理流程 Fig.2-1 Digital edge matching process 对于接边,手工处理效率非常低,对操作人员

7、的素质要求也较高,因此必须寻求一种自动化程度高,操作简便的接边方法,提高接边的效率和精度。本算法采用半自动接边,即采用人工判别与计算机处理相结合的地图接边处理法。在确定接边边界线和指定接边方法后,用人工指定需要接边处理的两条线,程序按要求完成接边处理工作。数字接边处理流程如图 2-1 所示。 3 图幅自动接边程序实现 本设计利用 ObjectARX 提供的面向对象的开发环境及应用程序接口,使用简单、功能强大、表达力丰富的 C#语言,在 Microsoft Visual Studio 2005 平台基础上进行编程,调用 ObjectARX 托管封装类,该类能对 AutoCAD 界面元素进行访问,

8、包括命令行、特性对话框、AutoCAD 编辑器及发布和打印组件,对 AutoCAD 进行二次开发,创建接边命令,通过AutoCAD 调用这些命令实现图幅接边自动化。 3.1 程序结构介绍 图 3-1 要素分类 Fig.3-1 Eelement category 接边过程中,首先要将需要拼接的两幅图的图形数据合并在一个临时的数据库中,根据各种地物的特点,将要素分为 4 类,如图 3-1:1)直线:实线道路、围墙、铁路、房屋等;2)多段线:小路、陡坎、斜坡、地类界等;3)曲线:等高线、水系等;4)房屋线:实线或虚线建筑物。然后再按指定接边方法进行接边处理。 使用 Microsoft Visual

9、Studio 2005 创建一个类库工程,使用“CommandMethod”属性,根据要素分类创建四个命令:直线接边命令(lineJB) 、多线段接边命令(polylineJB) 、曲线接边命令(curveJB)和房屋线接边命令(houseJB) 。每个命令程序包括三个模块:选择模块、接边模块和重绘模块。程序框架如 3-2 所示。 图 3-2 接边程序框架 Fig.3-2 Edge matching program framework 3.1.1 直线接边命令(lineJB) 1)选择模块 创建一个 Editor 类对象。Editor 类拥有访问 AutoCAD 命令行的相关方法,它还包括选择

10、对象和其它一些重要的功能。采用手工选择实体,用 PromptEntityOptions 类进行设置提示信息,根据提示信息,选择待接边的两个实体。将选择的实体存放在 PromptEntityResult 类对象中。 如果选择第一个实体操作结果(Status 属性)是 OK,继续选择第二个实体。否则在 AutoCAD 命令行输出“选择对象失败,请重新选择” 。如果选择两个实体的类型匹配,继续,否则在 AutoCAD 命令行输出“选择对象失败,请重新选择” 。验证条件:ent.GetType() = typeof(Line) BlockTableRecord btr=(BlockTableRecor

11、d) trans.GetObject(db1.CurrentSpaceId,OpenMode. ForWrite); 根据 wholePointArray 定义两个 Point3d 类对象mPoint3d、mPoint3d1,重构直线。 Line myline=new Line(mPoint3d , mPoint3d1); 3.1.2 多段线接边命令(polylineJB) 1)选择模块 多段线接边命令的选择模块与直线接边命令的选择模块相似。只是类型匹配验证条件变为:ent.GetType()=typeof(Polyline) 使用 Polyline 类 AddVertexAt 方法重构多段线

12、 myPolyline。 3.1.3 曲线接边命令(curveJB) 1)选择模块 曲线接边命令的选择模块与直线接边命令的选择模块相似。只是类型匹配验证条件变为:ent.GetType() = typeof(Spline) myPolyline2d. SplineFit();/将多段线曲线化 3.1.4 房屋线接边命令(houseJB) 房屋是由多段线围成,房屋线实质是多段线。 1)选择模块 房屋线接边命令的选择模块与直线接边命令的选择模块相似。只是类型匹配验证条件变为:ent.GetType()=typeof(Polyline) & ent1.GetType() = typeof(Polyl

13、ine) 2)接边模块 定义事务处理(Transaction)对象,把函数中有关数据库的操作封装起来。 using(Transaction trans=db. TransactionManager.StartTransaction() 根据选择两个实体的 ID,建立具有图形显示的 Entity 类对象ent、ent1。将 Entity 类对象 ent、ent1 强制转化为 Polyline 类对象Jbpolyline、Jbpolyline1。使用 Polyline 类 GetPoint2dAt 方法获取房屋线 Jbpolyline、Jbpolyline1 的顶点坐标,存于 List 类对象PointArray、PointArray1 中。如果房屋线是闭合,依次存入房屋线顶点后,再存入第一个存入的元素。对如果房屋线不是闭合,依次存入房屋线顶点。删除 Entity 类对象 ent、ent1,完成接边要素集的构建。 根据接边要素集判断接边要素对,房屋线接边命令与直线接边命令相似。只是房屋线有两对接边要素对。 对于房屋线实体,采用强制法接边。对于选择的两实体,将Jbpolyline1 接边点强制附和到 Jbpolyline 接边点上。除 Jbpolyline1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。