Отображение подписей на карте

0 голосов
спросил 23 Окт, 09 от LeaZzID (220 баллов) в категории Программные продукты Esri
Доброго времени суток!
Столкнулся со следующей проблемой. Имеется набор шейп-файлов, составляющих слои карты и созданый на их основе mxd. В приложении ArcMap настроил Labels для нужных слоев - все в нем (в ArcMap) отображается как надо. Однако в моем .NET приложении подписи не отображаются.
Пытаюсь заставить их отображаться следующим образом:

IGeoFeatureLayer layer = Map.get_Layer(5) as IGeoFeatureLayer;
if (layer != null)
{
    IField field = layer.DisplayFeatureClass.Fields.get_Field( 9 ); // поле которое должно быть отображено как подпись

    layer.DisplayField = field.Name;
    layer.DisplayAnnotation = true;
}

Подписи, конечно, отображаются, но не те, которые я указал (не из того поля, что прописал), а из поля, которое используется по умолчанию.

Далее пытаюсь другим способом (продолжение кода):

IAnnotateMapProperties annoMapProps = new AnnotateMapPropertiesClass();

IAnnotateLayerProperties annoLayerProps = null;
IElementCollection placed = null, unplaced = null;
layer.AnnotationProperties.QueryItem( 0, out annoLayerProps, out placed, out unplaced );
annoLayerProps.Class = "LINES_polyline";
annoLayerProps.DisplayAnnotation = true;
annoLayerProps.FeatureLayer = layer;
annoLayerProps.Priority = 0;
annoLayerProps.AnnotationMaximumScale = layer.MaximumScale;
annoLayerProps.AnnotationMinimumScale = layer.MinimumScale;
              
annoMapProps.AnnotateLayerPropertiesCollection.Add( annoLayerProps );

ITrackCancel trackCancel = new TrackCancelClass();

MapCtrl.Map.AnnotationEngine.Label(annoMapProps, Map.Map, trackCancel );

Собственно, эффект тот же.
Что я делаю не так? Есть ли простой способ отобразить лейблы, чтобы все было как настроено в ArcMap?


1 Ответ

0 голосов
ответил 02 Ноя, 09 от LeaZzID (220 баллов)
в итоге сделал вот так (вроде работает)

private void ShowLayerLabels(IGeoFeatureLayer layer, string labelExpression, int textSize, bool bold, int minScale,
    esriBasicOverposterWeight featureWeigth, esriBasicOverposterWeight labelWeight)
        {
            IAnnotateLayerProperties annoLayerProps = null;
            IElementCollection placed = null, unplaced = null;
            layer.AnnotationProperties.QueryItem(0, out annoLayerProps, out placed, out unplaced);
            if (annoLayerProps != null)
            {
               annoLayerProps.AnnotationMinimumScale = minScale;

               ILabelEngineLayerProperties2 labelEngineLayerProps = annoLayerProps as ILabelEngineLayerProperties2;
               labelEngineLayerProps.Expression = labelExpression;

               ILineLabelPosition labelPos = new LineLabelPositionClass();
               labelPos.ProduceCurvedLabels = labelPos.InLine = labelPos.Parallel = true;
               labelPos.OnTop = labelPos.Above = labelPos.Below = labelPos.AtEnd = labelPos.AtStart =
               labelPos.Horizontal = labelPos.Left = labelPos.Perpendicular = labelPos.Right = false;
               labelEngineLayerProps.BasicOverposterLayerProperties.LineLabelPosition = labelPos;

               labelEngineLayerProps.BasicOverposterLayerProperties.FeatureWeight = featureWeigth;

               labelEngineLayerProps.BasicOverposterLayerProperties.LabelWeight = labelWeight;

               stdole.IFontDisp font = new stdole.StdFontClass() as stdole.IFontDisp;
               font.Bold = bold;
               font.Charset = labelEngineLayerProps.Symbol.Font.Charset;
               font.Name = "Arial";
               font.Size = textSize;
               font.Italic = font.Underline = font.Strikethrough = false;
               labelEngineLayerProps.Symbol.Font = font;

               labelEngineLayerProps.Symbol.Color = m_gray;

               layer.DisplayAnnotation = true;
            }
        }
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...