CAD2GIS:arcengine注记添加

在做CAD注记转GIS注记,坎坷,百度了几乎所有可能的资料。

主要参照这里的方法(c++)。我使用C#重写了,均测试通过。

http://www.cnblogs.com/junyuz/archive/2011/09/01/2162625.html

重要提示:

       必须创建好注记图层,设置好比例尺和坐标系。困在这里两天没通过。

方法一 通过IFDOGraphicsLayer添加Elements的方式实现

        /// <summary>
        /// 添加到注记图层
        /// </summary>
        /// <param name="pFeatCls">注记图层</param>
        /// <param name="pGeometry">插入的位置:一般是一个IPoint</param>
        /// <returns></returns>
        protected bool InsertAnnoFea(IFeatureClass pFeatCls, IGeometry pGeometry)
        {

            IFeatureClass annocls = pFeatCls;
            IDataset pDataset = annocls as IDataset;
            ITransactions pTransactions = pDataset.Workspace as ITransactions;
            pTransactions.StartTransaction();
            IFDOGraphicsLayerFactory pFDOGLFactory = new FDOGraphicsLayerFactoryClass();
            ILayer tmpLayer = pFDOGLFactory.OpenGraphicsLayer(pDataset.Workspace as IFeatureWorkspace, annocls.FeatureDataset, pDataset.Name);
            IFDOGraphicsLayer pFDOGLayer = tmpLayer as IFDOGraphicsLayer;
            IElementCollection pElementColl = new ElementCollectionClass();

            pFDOGLayer.BeginAddElements();
            ITextElement pTextElement = AnnoUtil.MakeTextElement(text, dHSize, rgbColor, sHFont, dHAngle) as ITextElement;
            IElement pElement = pTextElement as IElement;
            pElement.Geometry = pGeometry;

            pElementColl.Add(pElement, 0);

            pFDOGLayer.DoAddElements(pElementColl, 0);
            pFDOGLayer.EndAddElements();

            pElementColl.Clear();
            pTransactions.CommitTransaction();

            return true;
        }

方法二 通过IAnnotationFeature来实现

        /// <summary>
        /// 添加到注记图层
        /// </summary>
        /// <param name="pFeatCls">注记图层</param>
        /// <param name="pGeometry">插入的位置:一般是一个IPoint</param>
        /// <returns></returns>
        protected bool InsertAnnoFea2(IFeatureClass pFeatCls, IGeometry pGeometry)
        {
            IFeatureClass annocls = pFeatCls;
            IWorkspace workspace = ((IDataset)annocls).Workspace;
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;
            bool startEdit = workspaceEdit.IsBeingEdited();
            if (!startEdit)
            {
                workspaceEdit.StartEditing(false);
            }
            workspaceEdit.StartEditOperation();

            ITextElement pTextElement = AnnoUtil.MakeTextElement(text, dHSize, rgbColor, sHFont, dHAngle) as ITextElement;
            IElement pElement = pTextElement as IElement;
            pElement.Geometry = pGeometry;

            IFeature pFeature = annocls.CreateFeature();

            IAnnotationFeature pAnnoFeature = pFeature as IAnnotationFeature;
            pAnnoFeature.Annotation = pElement;
            pFeature.Store();

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);
            return true;
        }

junyuz:这两种方法,经过实际测试都可以成功,在导入的时候还需要注意一下空间参考系的问题,需要对应上,特别要注意dwg中的数据是否正确,如果注记的坐标不在参考系范围内,会出现导入失败的现象,我就是因为这个低级的错误,纠结了两天。

ps. MakeTextElement是创建ITextElement的方法。

时间: 2024-11-09 09:47:49

CAD2GIS:arcengine注记添加的相关文章

ArcEngine标注和注记

转自原文 ArcEngine标注和注记 标注和注记是ArcEngine中提供的两种使用文字信息标注地图要素的方式.其中标注是作为图层的属性存在的,可以动态创建,注记作为地理要素被存储.需要注意的是Shp文件不支持注记.  绘制标注的方式有两种.让我们先看第一种: 1.使用TextElment绘制标注. 这种方法的原理就是把属性表中的某个属性创建TextElment对象,然后使用IGraphicsContainer 的AddElement方法添加标注.实例代码: //使用TextElment绘制标

Arcgis属性转CAD注记,添加CAD字段实现快速分层

我们有时候很头疼,在利用ArcGIS与CAD交互的时候,属性之间的转换就是非常的麻烦.这一篇文章内,我们给大家介绍下如何应用ArcGIS将其属性值转换成CAD的注记,以及如何实现通过利用arcgis的添加cad字段(Layer字段)来实现转成成CAD时的快速分成.下面利用演示视频为大家介绍. http://v.youku.com/v_show/id_XMTMyMTgyNDc0MA==.html?from=y1.7-1.1 可点击左上角我头像下方的学习我的系统课程!!!

ArcEngine查询、添加、删除要数的方法

转自原文ArcEngine查询.添加.删除要数的方法 1.查找数据 1).利用FeaturCursor进行空间查询 //空间查询 ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = envelope;//指定几何体 String shpFld = featureClass.ShapeFieldName; spatialFilter.GeometryField = shpFld; spa

ArcGIS连带文字注记导出为CAD格式

可以使用ArcGIS的"Export To CAD"工具将点.线.面等要素直接导出为CAD格式.如果要连带将ArcGIS中的文字标注导出为CAD格式要稍麻烦一点,下面是一个例子. 一.将SHP文件导入到GDB或者MDB数据库中(这里以MDB数据库为例): 新建MDB数据库: 将路网线状要素导入数据库 二.标注转注记 加载数据库中的数据并全屏显示 设置地图.显示单位为米,设置比例尺为当前比例尺 显示标记 标记转注记(这一步很关键) 这一步后就将文字注记单独作为一个要素图层添加到线状路网要

ArcGis 创建Annotation注记要素类、添加注记要素 并加载到Activeview AO C#

AO中一般有两种方式存储图面注记元素,一种使用TextElement,它是文档级的元素,编辑后要通过文档(mxd)保存:另一种是使用Annotation要素类,它是一个独立的要素类(featureclass),需要存储到地理数据库中.使用Annotation featureclass 的方式更灵活.更强大,至于如何灵活,如何强大,待你用到便自知. 1.创建一个标准的Annotation要素类(StandardAnnotationClass) 1 public AnnotationMark(IFe

WebGIS中自定义互联网地图局部注记的一种方案

1.    前言 实际项目中我们经常会遇到这样一种场景:地图底图可能是互联网地图(百度.高德.天地图)等等,同时我们自己又有某个区域单独的一套POI数据,我们需要将互联网地图中这个区域的原有POI数据进行遮罩然后只显示我们自己的POI数据. 针对这样的需求,我们首先想到的是能否我们只使用不包含注记的底图瓦片,然后再叠加上我们的POI数据.事实上,实际需求中还需要考虑一点,我们只有部分区域的POI数据,却没有其他区域的POI数据. 所以这个需求真正的核心是:除这个不规则多边形的指定区域外,地图均是

AE指定字段转成注记

转自原文 ae指定字段转成注记 ArcMap中有一个功能是Label Features,就是可以将图层内指定字段值显示以Label形式显示在主窗口上,在Label Features后,用右键点击图层,发现可以出现一个原来灰色的功能名,ConvertLabelsToAnnotation.这个功能在AE中提供,可是自己找不到设定字段值的位置,无可奈何,只有另辟蹊径. 就是先创建一个注记层,然后按照图层里指定字段的值来生成注记.就是一个一个Feature点转换.可能会比AE提供的接口效率低,没有办法,

C++的const关键词的一些注记

在c++中,const关键词出现在很多地方,有诸多的用途,也有很多的限制. 这里简单的列举一下const声明和定义的注意事项:(const对象定义时必须初始化,下面的例子只是说明一下const位置的含义) const出现在声明或者定义变量的类型的前面的时候,const修饰的是变量本身 如:const char *value; //指针a指向const char类型,是指指针所指的变量不能改变,而指针本身的值可以改变 其它情况的const修饰其左边的符号: char *const value;//

X3DOM 1.6.1 发布注记

X3DOM 1.6.1 主要包含了一些新的功能特性.bug修复,是1.6的维护性更新版本. 特性 ClipPlane 支持 实例 here 及文档 here TwoSidedMaterial 支持 实例 here 及文档 here SphereSensor 支持 文档 here 问题修复与改进增强 改进了GeoOrigin 的支持 TURNTABLE导航模式支持多点触摸 修复从Appearance移除的Shader特性 带雾(fog)应用移动到正确的位置 修复 ElevationGrid set