转自原文 ae指定字段转成注记

ArcMap中有一个功能是Label Features,就是可以将图层内指定字段值显示以Label形式显示在主窗口上,在Label Features后,用右键点击图层,发现可以出现一个原来灰色的功能名,ConvertLabelsToAnnotation。这个功能在AE中提供,可是自己找不到设定字段值的位置,无可奈何,只有另辟蹊径。

就是先创建一个注记层,然后按照图层里指定字段的值来生成注记。就是一个一个Feature点转换。可能会比AE提供的接口效率低,没有办法,自己不会用那个接口,也就只能这样勉强的用着了。这个方面最难点就是创建一个新的注记图层,有很多属性需要设置,比较麻烦,下面是代码

private void ConvertToAnnotationLayer(IMap pMap, ILayer pLayer, string fieldname, esriGeometryType type)
{
IFeatureLayer pFeatLayer = pLayer as IFeatureLayer; int i = pFeatLayer.FeatureClass.FindField("SHAPE");
IField pShapeField = pFeatLayer.FeatureClass.Fields.get_Field(i);
IDataset pDataSet = pFeatLayer.FeatureClass as IDataset;
IWorkspace pWS = pDataSet.Workspace;
IFeatureWorkspace pFeatWS = pWS as IFeatureWorkspace; IGeoFeatureLayer pGeoFeatLayer = pFeatLayer as IGeoFeatureLayer;
IFields pFields = pGeoFeatLayer.FeatureClass.Fields; IAnnotationLayerFactory pAnnoLayerFact = new FDOGraphicsLayerFactoryClass();
IGraphicsLayerScale pGraphyScale = new GraphicsLayerScaleClass();
pGraphyScale.ReferenceScale = ;
pGraphyScale.Units = esriUnits.esriMeters;
IAnnotationLayer pAnnoLayer = null; ISymbolCollection2 pSymColl = new SymbolCollectionClass();
IFormattedTextSymbol pTextSymbol = new TextSymbolClass();
IRgbColor pRGB = new RgbColorClass();
pRGB.Red = ;
pRGB.Blue = ;
pRGB.Green = ;
pTextSymbol.Color = pRGB; /* pTextSymbol.Font=*/ m_FontDisp.Size=;
pTextSymbol.Font =m_FontDisp ;
pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;
pTextSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;
pTextSymbol.CharacterSpacing = ;
pTextSymbol.CharacterWidth = ;
pTextSymbol.WordSpacing = ; // IBoundsProperties pBoundProp = pTextSymbol as IBoundsProperties;
/* pBoundProp.FixedSize = false;*/
// pBoundProp.FixedAspectRatio = true;
ISymbol pSymbol = pTextSymbol as ISymbol;
ISymbolIdentifier2 pSymident2;
pSymColl.AddSymbol(pSymbol, fieldname, out pSymident2);
ISymbolCollection pSymColl1= pSymColl as ISymbolCollection; IOverposterProperties pOverpost = new BasicOverposterPropertiesClass(); IAnnotateLayerPropertiesCollection pAnnoPropColl = new AnnotateLayerPropertiesCollectionClass();
IAnnotateLayerProperties pAnnoProp;
ILabelEngineLayerProperties2 pLabelEngine=new LabelEngineLayerPropertiesClass();
pLabelEngine.AnnotationClassID = ;
pLabelEngine.Symbol = pTextSymbol;
pLabelEngine.SymbolID = pSymident2.ID;
pAnnoProp = pLabelEngine as IAnnotateLayerProperties;
pAnnoProp.Class = pLayer.Name + fieldname;
pAnnoProp.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
pAnnoProp.Priority = ;
IActiveView pActView=pMap as IActiveView;
pAnnoProp.GraphicsContainer = pActView.GraphicsContainer;
pAnnoProp.FeatureLayer = pFeatLayer;
pAnnoProp.FeatureLinked = true;
pAnnoProp.AnnotationMaximumScale = ;
pAnnoProp.AnnotationMinimumScale = 0.00000000001;
pAnnoPropColl.Add(pAnnoProp);
try
{
pAnnoLayer=pAnnoLayerFact.CreateAnnotationLayer(pFeatWS, pFeatLayer.FeatureClass.FeatureDataset, pLayer.Name + "_A_" + fieldname, pShapeField.GeometryDef,
null, pAnnoPropColl,pGraphyScale,pSymColl1 , false, false, false, true, pOverpost, ""); }
catch (Exception s)
{
string mes = s.Message;
}
if (pAnnoLayer == null)
return;
int num=pFields.FindField(fieldname);
ConvertToAnnotateByFeature(pLayer, num, ref pAnnoLayer);
pMap.AddLayer(pAnnoLayer as ILayer);
}
private bool ConvertToAnnotateByFeature(ILayer pLayer,int fieldnum,ref IAnnotationLayer pAnnoLayer)
{
IFeatureLayer pFeatlayer = pLayer as IFeatureLayer;
if (pFeatlayer == null)
return false;
IFeatureClass pFeatClass = pFeatlayer.FeatureClass;
IFeatureCursor pFeatCursor = pFeatClass.Search(null, false);
IFeature pFeat = pFeatCursor.NextFeature(); IFeatureLayer pAnnoFeatLayer=pAnnoLayer as IFeatureLayer;
IAnnotationClassExtension pAnnotateExten = pAnnoFeatLayer.FeatureClass.Extension as IAnnotationClassExtension;
ISymbol pSymbol = pAnnotateExten.SymbolCollection.get_Symbol();
IGeometry pGeo;
double angle = ;
IRgbColor pRGB=new RgbColorClass();
pRGB.Blue=;
pRGB.Green=;
pRGB.Red=;
/////判断是不是公路层的Width,特殊处理/////
string temp_layername = pLayer.Name.ToUpper();
bool bwidth=false;
if(pFeatClass.Fields.get_Field(fieldnum).Name.ToUpper()=="WIDTH")
{
if (pLayer.Name.ToUpper().Contains("LRDL"))
bwidth = true;
}
IElementCollection pElementColl = new ElementCollectionClass();
pAnnoLayer.BeginAddElements();
while(pFeat!=null)
{
pGeo = pFeat.Shape;
IPoint pLabelPoint = null;
if(pGeo is IPolyline)
{
IPolyline pline=pGeo as IPolyline;
pLabelPoint = GetLabelPoint(pline);
}
if(pGeo is IPoint)
{
pLabelPoint = pGeo as IPoint;
}
if(pGeo is IPolygon)
{
IPolygon pPolygon = pGeo as IPolygon;
IArea pArea = pPolygon as IArea;
pLabelPoint = pArea.LabelPoint;
}
object val=pFeat.get_Value(fieldnum);
string s=val.ToString();
if (s == null || s.Length == )
{
pFeat = pFeatCursor.NextFeature();
continue;
}
///对公路的宽度进行特殊处理
if(bwidth)
{ double width = double.Parse(s);
int rtegnum = pFeatClass.FindField("RTEG");
string rteg = pFeat.get_Value(rtegnum).ToString();
if(rteg=="高速"&&width>55.0)
{
IElement pElement = MakeTextElement(pGeo, angle, s, pRGB, pSymbol);
pElementColl.Add(pElement, pFeat.OID);
}
else if(width>40.0)
{
IElement pElement = MakeTextElement(pGeo, angle, s, pRGB, pSymbol);
pElementColl.Add(pElement, pFeat.OID);
}
}
else if (/*pLabelPoint != null&&*/s.Length>)
{
IElement pElement = MakeTextElement(pGeo, angle, s, pRGB,pSymbol);
pElementColl.Add(pElement, pFeat.OID);
}
pFeat = pFeatCursor.NextFeature();
}
pAnnoLayer.EndAddElements();
pAnnoLayer.BeginAddElements();
if(pElementColl.Count<)
{
pAnnoLayer.EndAddElements();
return true;
}
pAnnoLayer.DoAddElements(pElementColl, );
/* pAnnoLayer.SetupAttributeConversion()*/
pAnnoLayer.EndAddElements();
return true;
}

AE指定字段转成注记的更多相关文章

  1. AE读取CAD图层包括注记

    public override void FillDatabase(Teigha.DatabaseServices.Database pDb) { IFeatureClassContainer pFe ...

  2. MapGIS注记文字无损转入ArcGIS软件

    在GIS软件中,注释是一种十分特殊的对象,虽然各类软件都支持注释,但它却不属于GIS的基本对象.因此通常的格式转换软件,都不对注释对象做特别的支持,我们最常见的Shape文件格式就只有点.线.面要素, ...

  3. ArcGIS中的标注和注记

    在ArcMap中可以使用标注和注记来识别要素,选择标注或注记取决于你需要如何控制文本显示以及在ArcMap中如何存储文本. 1.标注只是临时显示相关数据或字段 2.标注用于长时间保存数据以及显示方式. ...

  4. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇

    原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...

  5. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

  6. mgo-后续测试(指定字段,获取id)

    测试完mgo中的DBRef后,想接着测试指定字段的显示,才发现原来采用框架编码,很多问题被隐藏了起来: 1.显示指定字段: 之前在使用mgo时一直是查询全部字段,在mongo终端环境写为如下格式: & ...

  7. 【ArcEngine入门与提高】Element(元素)、Annotation(注记)旋转

    因项目需要,需要做一个旋转注记的工具.因为注记这玩意用的比较少,网上资源也很少,所以做起来相当头疼.在经过一番研究之后,终于搞清楚注记的存储原理了,原来是和Element的类似,只不过注记是要把Ele ...

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

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.    前言 实际项目中我们经常会遇到这样一种场景:地图底图可能是互 ...

  9. Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

    应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...

随机推荐

  1. 转:Java的一道面试题----静态变量初始化过程

    public class Test{ private static Test tester = new Test(); //step 1 private static int count1; //st ...

  2. jmeter--FTP测试

    FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. 当然,JMeter官方网站的用户手册也有例子,但由于版本较早,我也算是 ...

  3. BZOJ4025: 二分图(LCT)

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...

  4. 四、Docker+Tomcat

    原文:四.Docker+Tomcat 一.下载Tomcat镜像 具体可以search 搜索tomcat 相关镜像 docker pull sonodar/jdk8-tomcat8 二.创建容器 doc ...

  5. CISP/CISA 每日一题 八

    CISA 每日一题(答)网关执行电子邮件格式转换 电子邮件安全——加密 大文件——对称加密 不可否认——非对称 哈希——完整性     电子银行主要风险: 战略.经营和声誉上的风险 双SSP每日一题 ...

  6. 【习题 7-10 Uva11214】Guarding the Chessboard

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 可以想见最后深度不会很深吧.. 然后皇后之间互相攻击到是允许的.. 就这样 [代码] /* 1.Shoud it u ...

  7. SJTU 3001. 二哥的幸运

    Description 二哥是一个挺二的人,在二哥的世界观中,有些数字代表着幸运,假设在某一天二哥可以看到一个幸运数字,那么他将很高兴.当然,二哥对于幸运的定义也是不同凡响,假设一个数字仅仅包括4或者 ...

  8. Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  9. 94.文件bat脚本自删除

    taskkill / f / im 自删除.exedel 自删除.exedel 1.bat void main() { FILE *pf = fopen("1.bat", &quo ...

  10. Python图片的横坐标汉字

    给一个例子 : # -*- coding: utf-8 -*-import matplotlib.pyplot as plt  import py_hanzi as ch         #关键在于这 ...