博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CAD2GIS:arcengine注记添加(转载)
阅读量:6671 次
发布时间:2019-06-25

本文共 2861 字,大约阅读时间需要 9 分钟。

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

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

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

 

重要提示:

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

 

 

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

///         /// 添加到注记图层        ///         /// 注记图层        /// 插入的位置:一般是一个IPoint        /// 
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来实现

///         /// 添加到注记图层        ///         /// 注记图层        /// 插入的位置:一般是一个IPoint        /// 
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; }

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

 

ps. MakeTextElement是创建ITextElement的方法。

标签:                           

原文:http://www.cnblogs.com/GISRSMAN/p/4549444.html

你可能感兴趣的文章
EasyUI笔记(五)表单
查看>>
电动汽车与ADAS
查看>>
微信jsapi支付
查看>>
html禁止缓存代码
查看>>
js 所有事件列表
查看>>
EntityFrameWork Parameter '@columnType' must be defined.
查看>>
30个提高Web程序执行效率的好经验
查看>>
JavaScript DOM 编程艺术(第2版)读书笔记(5)
查看>>
工作流开发使用问题汇总
查看>>
常用Build-in Keywords
查看>>
leetcode — edit-distance
查看>>
第一次作业:基于Linux进程模型的分析
查看>>
贝叶斯学习1
查看>>
CSS 和 JS 动画哪个更快
查看>>
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
查看>>
正则表达式匹配html标签里面的内容
查看>>
window.open()的具体使用方法
查看>>
【IntelliJ IDEA】idea显示工具栏
查看>>
Android Exception 5(startActivityForResult & singleTask)
查看>>
sp_send_dbmail权限问题
查看>>