ArcEngine标注和注记
转自原文 ArcEngine标注和注记
标注和注记是ArcEngine中提供的两种使用文字信息标注地图要素的方式.其中标注是作为图层的属性存在的,可以动态创建,注记作为地理要素被存储.需要注意的是Shp文件不支持注记. 绘制标注的方式有两种.让我们先看第一种:
1.使用TextElment绘制标注.
这种方法的原理就是把属性表中的某个属性创建TextElment对象,然后使用IGraphicsContainer 的AddElement方法添加标注.实例代码:
//使用TextElment绘制标注, fieldName为要绘制的属性
public static void AddLable(AxMapControl axMapControl, ILayer layer, string fieldName)
{
IRgbColor pColor = new RgbColorClass()
{
Red = ,
Blue = ,
Green =
};
IFontDisp pFont = new StdFont()
{
Name = "宋体",
Size =
} as IFontDisp; ITextSymbol pTextSymbol = new TextSymbolClass()
{
Color = pColor,
Font = pFont,
Size =
}; IGraphicsContainer pGraContainer = axMapControl.Map as IGraphicsContainer; //遍历要标注的要素
IFeatureLayer pFeaLayer = layer as IFeatureLayer;
IFeatureClass pFeaClass = pFeaLayer.FeatureClass;
IFeatureCursor pFeatCur = pFeaClass.Search(null, false);
IFeature pFeature = pFeatCur.NextFeature();
int index = pFeature.Fields.FindField(fieldName);//要标注的字段的索引
IEnvelope pEnv = null;
ITextElement pTextElment = null;
IElement pEle = null;
while (pFeature != null)
{
//使用地理对象的中心作为标注的位置
pEnv = pFeature.Extent;
IPoint pPoint = new PointClass();
pPoint.PutCoords(pEnv.XMin + pEnv.Width * 0.5, pEnv.YMin + pEnv.Height * 0.5); pTextElment = new TextElementClass()
{
Symbol = pTextSymbol,
ScaleText = true,
Text = pFeature.get_Value(index).To\String()
};
pEle = pTextElment as IElement;
pEle.Geometry = pPoint;
//添加标注
pGraContainer.AddElement(pEle, );
pFeature = pFeatCur.NextFeature();
}
(axMapControl.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, axMapControl.Extent);
}
2.使用ArcEngine中的标注对象口.LabelEngineLayerProperties来标注要素
IGeoFeatureLayer中的AnnotationProperties是一个包含LabelEngineLayerProperties对象的标注集合.而 LabelEngineLayerProperties实现了:
IAnnotateProperties, //
IAnnotateLayerProperties, //可以控制标注的显示比例尺,过滤条件等
ILabelEngineLayerProperties,
IAnnotateLayerTransformationProperties //控制标注的参考比例尺,单位,标注边界和缩放比率等
等几个主要的接口.LabelEngineLayerProperties可以操作标注要素的多个属性和行为,如设置文本的标注位置,标注尺寸,设置脚本,文字符号等.该类实现了大量操作标注的属性和方法,对于复杂的标注非常有用,而TextElment适合简单的标注. ILabelEngineLayerProperties2是LabelEngineLayerPropertiesClass 的主接口.他的Expression和IsExpressionSimple用法如下:
IsExpressionSimple=true,Expression为简单表达式,其形式为: "["+属性字段名+"]"+其他,
IsExpressionSimple=true=false,Expression为复杂表达式,其内容也为一个字符串,但是一个完整的VBScript or JScript 函数或者表达式.
ExpressionParser属性是一个Expression解析器,它支持更复杂的JS和Vbs代码.
//添加标注,比TextElment功能更强大
public static void AddAnnotate(ILayer layer,string fieldName)
{
IGeoFeatureLayer pGeoLayer = layer as IGeoFeatureLayer;
IAnnotateLayerPropertiesCollection IPALPColl = pGeoLayer.AnnotationProperties;
IPALPColl.Clear(); IRgbColor pColor = GetColor(, , , );
IFontDisp pFont = new StdFont()
{
Name = "宋体",
Bold = true
} as IFontDisp; ITextSymbol pTextSymbol = new TextSymbolClass()
{
Color = pColor,
Font = pFont,
Size =
}; //用来控制标注和要素的相对位置关系
ILineLabelPosition pLineLpos = new LineLabelPositionClass()
{
Parallel = false, //修改标注的属性
Perpendicular = true,
InLine = true
};
//用来控制标注冲突
ILineLabelPlacementPriorities pLinePlace = new LineLabelPlacementPrioritiesClass()
{
AboveStart = , //让above 和start的优先级为5
BelowAfter =
};
//用来实现对ILineLabelPosition 和 ILineLabelPlacementPriorities以及更高级属性的控制
IBasicOverposterLayerProperties pBOLP = new BasicOverposterLayerPropertiesClass()
{
FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon,
LineLabelPlacementPriorities = pLinePlace,
LineLabelPosition = pLineLpos
}; //创建标注对象
ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass()
{
Symbol = pTextSymbol,
BasicOverposterLayerProperties = pBOLP,
IsExpressionSimple = true,
Expression = "["+fieldName+"]"
}; //设置标注的参考比例尺
IAnnotateLayerTransformationProperties pAnnoLyrPros = pLableEngine as IAnnotateLayerTransformationProperties;
pAnnoLyrPros.ReferenceScale = ; //设置标注可见的最大最小比例尺
IAnnotateLayerProperties pAnnoPros = pLableEngine as IAnnotateLayerProperties;
pAnnoPros.AnnotationMaximumScale = ;
pAnnoPros.AnnotationMinimumScale = ;
//pAnnoPros.WhereClause属性 设置过滤条件 IPALPColl.Add(pAnnoPros);
pGeoLayer.DisplayAnnotation = true;
}
ArcEngine标注和注记的更多相关文章
- ArcGIS中的标注和注记
在ArcMap中可以使用标注和注记来识别要素,选择标注或注记取决于你需要如何控制文本显示以及在ArcMap中如何存储文本. 1.标注只是临时显示相关数据或字段 2.标注用于长时间保存数据以及显示方式. ...
- ArcMap 标注、注记、图形文本
标注.注记.图形文本 2016年8月10日10:29 ArcMap中怎样向地图添加文本,其中标注与注记是重点内容,此处对此进行总结. 参考链接: ①地图文本基本词汇: 什么是文本? ArcGIS 提供 ...
- 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...
- 【ArcEngine入门与提高】Element(元素)、Annotation(注记)旋转
因项目需要,需要做一个旋转注记的工具.因为注记这玩意用的比较少,网上资源也很少,所以做起来相当头疼.在经过一番研究之后,终于搞清楚注记的存储原理了,原来是和Element的类似,只不过注记是要把Ele ...
- 创建文本注记TextElement
1.创建一个字体 /// <summary> /// 字体设置 /// </summary> /// <param name="size">Th ...
- ArcGIS连带文字注记导出为CAD格式
可以使用ArcGIS的"Export To CAD"工具将点.线.面等要素直接导出为CAD格式.如果要连带将ArcGIS中的文字标注导出为CAD格式要稍麻烦一点,下面是一个例子. ...
- 用IFeatureWorkspaceAnno.CreateAnnotationClass 创建注记图层时报“The application is not licensed to modify or create schema”的错误的解决方案。
用IFeatureWorkspaceAnno.CreateAnnotationClass 的方法创建注记图层的时候报"The application is not licensed to m ...
- 如何在ArcGIS中恢复注记文字
文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件 ...
- MapGIS注记文字无损转入ArcGIS软件
在GIS软件中,注释是一种十分特殊的对象,虽然各类软件都支持注释,但它却不属于GIS的基本对象.因此通常的格式转换软件,都不对注释对象做特别的支持,我们最常见的Shape文件格式就只有点.线.面要素, ...
随机推荐
- 在VPS上用Outline Manager 建立*** 增强版服务器
在VPS上用Outline Manager 建立*** 增强版服务器 原文 https://free.com.tw/google-outline/ Outline 是Google Jigsaw的一款开 ...
- session和cookie详解
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一 技术.本文将详细讨论session的工作机制并且对在Java ...
- Gym - 100625J Jailbreak 最短路+搜索
http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...
- 使用PyV8模块破解网站加密cookie
PyV8是Chromium中内嵌的javascript引擎,号称跑的最快.PyV8是用Python在V8的外部API包装了一个python壳,这样便可以使python可以直接与javascript操作 ...
- Hexo页面优化和音乐的心得
灵感 这两天在添加“留言”以及“关于”页面,准备先简单设计一下自已的页面.留言页面可以放置一些自已比较感兴趣的音乐.以及一些JS特效,再集成一个第三方的留言功能.关于页面可以放置一些简单的联系方式.以 ...
- boost.property_tree的高级用法(你们没见过的操作)
版权声明:本文为博主原创文章,未经博主允许不得转载. 前一阵写项目,终于将这个boost下的xml读取类完成了,由于网上对property_trees的讲解很少,最多也就到get_child这个层面, ...
- 关于结构体内存对齐方式的总结(#pragma pack()和alignas())
最近闲来无事,翻阅msdn,在预编译指令中,翻阅到#pragma pack这个预处理指令,这个预处理指令为结构体内存对齐指令,偶然发现还有另外的内存对齐指令aligns(C++11),__declsp ...
- 【CS Round #37 (Div. 2 only) A】Boring Number
[Link]:https://csacademy.com/contest/round-37/task/boring-number/ [Description] 让你找离平均数最近的一个数的下标; [S ...
- 【Uva 242】Stamps and Envelope Size
[Link]: [Description] 给你n个集合; 每个集合都包含一些不同面额的邮票; (每种邮票都当做有无限张) 然后给你一封信上最多能贴的邮票张数S; 问你,哪一个集合的邮票; 能够贴出来 ...
- 【Uva 1601】The Morning after Halloween
[Link]: [Description] 给你一张平面图; 最多可能有3只鬼; 给出这几只鬼的初始位置; 然后,这几只鬼有各自的终点; 每秒钟,这几只鬼能同时移动到相邻的4个格子中的一个 任意两只鬼 ...