zoukankan      html  css  js  c++  java
  • AE指定字段转成注记

    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);
            }
  • 相关阅读:
    数据库存储过程
    asp.net类中公共类DBHelp
    asp.net Cookie的用法实例
    使用SandCastle创建.Net帮助文档
    DotNetNuke(DNN)如何升级到DNN 4.9.3
    两个VS的文档工具
    SunBlogNuke.net logo设计
    自动化测试网站
    Debugging DLL Projects
    .NET 下自动生成UML图
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1231140.html
Copyright © 2011-2022 走看看