Проблемы с отображением текста на полигон

0 голосов
спросил 17 Авг, 05 от Ret48 (120 баллов) в категории Программные продукты Esri

1. Подскажите pls, как вывести на полигоне(улице) текст (например поля OBJECTID), чтобы он вписывался в полигон. Попробовал такой VC код:

        CMoLayers layers(m_map.GetLayers());

        CMoMapLayer layer(layers.Item(COleVariant(TEXT("Streets"))));
        layer.SetVisible(TRUE);
        CMoFont fnt;
        fnt.SetName(TEXT("Arial"));
        fnt.SetWeight(FW_BOLD);

        CMoLabelPlacer labelPlacer;

        labelPlacer.CreateDispatch("MapObjects2.LabelPlacer");

        labelPlacer.SetField(TEXT("OBJECTID"));

        labelPlacer.SetDrawBackground(true);

        labelPlacer.SetMaskColor(m_map.GetBackColor());
        labelPlacer.SetPlaceAbove(false);
        labelPlacer.SetPlaceBelow(false);
        labelPlacer.SetPlaceOn(true);

        CMoTextSymbol textSym(labelPlacer.GetDefaultSymbol());
        CMoRectangle fullExtent(m_map.GetExtent());

        textSym.SetHeight(.04);
        textSym.SetFont(fnt);

        textSym.SetColor(RGB(100, 100, 0));
        textSym.SetFitted(true);

        layer.SetRenderer(labelPlacer);
        labelPlacer.ReleaseDispatch();

        m_map.Refresh();

, у меня один полигон почти похож на букву Г, и текст отображается в стороне, непонятно где.

2. Как на полигоне отобразить текст из поля внешней базы (Access). Т.е. как можно связать например по ID два рекордсета: MapObject'а и Ado/DAO.

Заранее спасибо за любые советы!

1 Ответ

0 голосов
ответил 13 Сен, 05 от Ulukbek (6,020 баллов)

Если объекты надо подписать по значению поля из шейп-файла, правильно, использовать LabelPlacer. Я пишу на VB, никаких проблем не было никогда...

Sub LayerLabels(pl As MapObjects2.MapLayer, sLabelField As String, _
   Optional Show As Boolean = True, Optional fSize As Double = 10, _
   Optional cColor As Long = 0)
   '   устанавливает или снимает поле надписи для слоя
   On Error Resume Next
   If Show Then
      Dim lr As New LabelPlacer  ' LabelRenderer
      Dim fnt As New StdFont
     
      fnt.Name = "Tahoma"
      fnt.Size = fSize
      fnt.Bold = False
      fnt.Charset = 204 ' russian car set
     
      lr.SymbolCount = 1
      lr.Field = sLabelField
      lr.Symbol(0).Font = fnt
      lr.Symbol(0).Color = cColor
     
      Set lr.DefaultSymbol.Font = fnt
      lr.DefaultSymbol.Color = cColor
     
      lr.UseDefault = True
      lr.PlaceBelow = True
      lr.PlaceBelow = True
      lr.PlaceOn = True
      lr.SplinedText = False ' True
      pl.Renderer = lr
   Else
      pl.Renderer = Nothing
   End If
   On Error GoTo 0
End Sub

А связать с АДО можно, для это надо использовать Event-ы на TrackingLayer. Каждый Event имеет Tag, что надо связать с id объекта, использовать Map.DrawText ... если есть необходимость ... опишу более подробно...

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