ArcEngine 同名标注不显示问题解决思路

    IFeatureLayer pFeatureLayer = CommonLib.ArcObjects.Map.GetFeatureLayerByDatasetName(m_App.FocusMap, "SCDLTB");
            IGeoFeatureLayer pGeoLayer = pFeatureLayer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection pannotateCollection = pGeoLayer.AnnotationProperties;
            pannotateCollection.Clear();
            ITextSymbol pTextSymbol = GetSymbol();
            IBasicOverposterLayerProperties4 pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass()
            {
                FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon,
                NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape //重要的是这句话加上
            };


            IAnnotationExpressionEngine expressionEngine = new AnnotationVBScriptEngineClass();
            //创建标注对象
            ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass()
            {
                Symbol = pTextSymbol,
                BasicOverposterLayerProperties = pBasicOverposterLayerProperties as IBasicOverposterLayerProperties,
                IsExpressionSimple = false,
                ExpressionParser = expressionEngine,
                Expression =
                 "Function FindLabel([DLMC],[CXZMC] )" + "\r\n" +
                "Dim mcl" + "\r\n" +
                "Dim cmcl" + "\r\n" +
                "mcl = Len([DLMC])" + "\r\n" +
                "cmcl = Len([CXZMC])" + "\r\n" +
                "Dim strLeftSpace" + "\r\n" +
                "Dim strRightSpace" + "\r\n" +
                "strLeftSpace = \"\"" + "\r\n" +
                "strRightSpace = \"\"" + "\r\n" +
                "If mcl> cmcl Then" + "\r\n" +
                 "For i = 0 To(mcl - cmcl) / 2" + "\r\n" +
                 "strLeftSpace = strLeftSpace + chr(32)" + "\r\n" +
                 "strRightSpace = strRightSpace + chr(32)" + "\r\n" +
                 "Next" + "\r\n" +
                 "End If" + "\r\n" +
                  "FindLabel = \"<UND>\" & strLeftSpace & [DLMC] & strRightSpace & \"</UND>\"& chr(13) & chr(10) &  [CXZMC]" + "\r\n" +
                "End Function"
            };


            // 设置标注的参考比例尺
            IAnnotateLayerTransformationProperties pAnnoLyrPros = pLableEngine as IAnnotateLayerTransformationProperties;
            pAnnoLyrPros.ReferenceScale = 2500;


            //设置标注可见的最大最小比例尺
            IAnnotateLayerProperties pAnnoPros = pLableEngine as IAnnotateLayerProperties;
            pAnnoPros.AnnotationMaximumScale = 0;
            pAnnoPros.AnnotationMinimumScale = 15000;
            //pAnnoPros.WhereClause属性  设置过滤条件


            pannotateCollection.Add((IAnnotateLayerProperties)pLableEngine);
            pGeoLayer.DisplayAnnotation = true;

猜你喜欢

转载自blog.csdn.net/kongzhonliuxing/article/details/80067221