2016-11-03 4 views
0

Я использую GMAPS в C# (Winforms), и я хотел бы добавить маркер с меткой. Я последовал за ответом на GMAP.NET adding labels underneath markers и заметил, что проблема с реализацией. Маркеры не отображаются в правильном месте, а метки все начертаны друг на друга. Я думаю, что это неправильно назвать метод OnRender для маркера? Может кто-то указать мне верное направление?GMAP.NET, добавляя метки к маркерам

+0

Похоже, ошибка, которая была зафиксирована еще несколько лет назад – geocodezip

+0

Интересно, насколько я могу сказать, я использую последнюю версию (1.7.1). Мне удалось исправить проблему размещения маркера, вызвав base.OnRender (g). –

ответ

0

В этой же проблеме возникла проблема, и только вызов base.OnRender(g); не исправил ее для меня. Фокус в том, чтобы получить от GMarkerGoogle вместо GMapMarker, как это сделано в ответе, который вы указали.

Также мне пришлось сделать некоторые изменения с помощью рендеринга текста. Я придумал это решение, отлично работает для меня:

public class GmapMarkerWithLabel : GMarkerGoogle, ISerializable 
{ 
    private readonly Font _font; 
    private GMarkerGoogle _innerMarker; 
    private readonly string _caption; 

    public GmapMarkerWithLabel(PointLatLng p, string caption, GMarkerGoogleType type) 
     : base(p, type) 
    { 
     _font = new Font("Arial", 11); 
     _innerMarker = new GMarkerGoogle(p, type); 

     _caption = caption; 
    } 

    public override void OnRender(Graphics g) 
    { 
     base.OnRender(g); 

     var stringSize = g.MeasureString(_caption, _font); 
     var localPoint = new PointF(LocalPosition.X - stringSize.Width/2, LocalPosition.Y + stringSize.Height); 
     g.DrawString(_caption, _font, Brushes.Black, localPoint); 
    } 

    public override void Dispose() 
    { 
     if (_innerMarker != null) 
     { 
      _innerMarker.Dispose(); 
      _innerMarker = null; 
     } 

     base.Dispose(); 
    } 

    #region ISerializable Members 

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     GetObjectData(info, context); 
    } 

    protected GmapMarkerWithLabel(SerializationInfo info, StreamingContext context) 
     : base(info, context) 
    { } 

    #endregion 
} 
Смежные вопросы