欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
AE指定字段转成注记
08-06-13 08:33:33 作者:xbt746 出处:xbt746.cnblogs.com

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 
= 200000;
            pGraphyScale.Units 
= esriUnits.esriMeters;
            IAnnotationLayer pAnnoLayer 
= null;

            ISymbolCollection2 pSymColl 
= new SymbolCollectionClass();
            IFormattedTextSymbol pTextSymbol 
= new TextSymbolClass();
            IRgbColor pRGB 
= new RgbColorClass();
            pRGB.Red 
= 0;
            pRGB.Blue 
= 0;
            pRGB.Green 
= 0;
            pTextSymbol.Color 
= pRGB;
            
      
/*      pTextSymbol.Font=*/

         
            m_FontDisp.Size
=8;           
            pTextSymbol.Font 
=m_FontDisp ;
            pTextSymbol.HorizontalAlignment 
= esriTextHorizontalAlignment.esriTHACenter;
            pTextSymbol.VerticalAlignment 
= esriTextVerticalAlignment.esriTVABaseline;
            pTextSymbol.CharacterSpacing 
= 100;
            pTextSymbol.CharacterWidth 
= 50;
            pTextSymbol.WordSpacing 
= 100;
            
   
//         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 
= 0;
            pLabelEngine.Symbol 
= pTextSymbol;
            pLabelEngine.SymbolID 
= pSymident2.ID;
            pAnnoProp 
= pLabelEngine as IAnnotateLayerProperties;
            pAnnoProp.Class 
= pLayer.Name + fieldname;
            pAnnoProp.LabelWhichFeatures 
= esriLabelWhichFeatures.esriAllFeatures;
            pAnnoProp.Priority 
= 0;
            IActiveView pActView
=pMap as  IActiveView;
            pAnnoProp.GraphicsContainer 
= pActView.GraphicsContainer;
            pAnnoProp.FeatureLayer 
= pFeatLayer;
            pAnnoProp.FeatureLinked 
= true;
            pAnnoProp.AnnotationMaximumScale 
= 10000000000000000000;
            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 , falsefalsefalsetrue, 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);
        }
9 7 3 1 2 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    把Annotation转换为Polygon Features
    ae指定字段转成注记
    向Annotation图层添加feature 
    AE创建Annotation
    CRS-0184: Cannot communicate with the CRS daemon
    线注记
    标注与注记(Label与Annotation)关系与区别

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号