2016-11-03 23 views
0

GMAPSをC#(Winforms)で使用していますが、ラベル付きのマーカーを追加したいと思います。私はGMAP.NET adding labels underneath markersの答えに続き、実装に問題があることに気づいた。マーカーは正しい場所にプロットされておらず、ラベルはすべて互いに上にプロットされています。私はそれがマーカーのOnRenderメソッドを正しく呼んでいないと思いますか?誰かが私を正しい方向に向けることができますか?GMAP.NET、マーカーにラベルを追加する

+0

は、私の知る限り、私は、最新バージョン(1.7.1)を使用しています言うことができるように、数年前 – geocodezip

+0

興味深い修正されたバグのような音:私は私のために正常に動作し、このソリューションを思い付きました。 base.OnRender(g)を呼び出して、マーカーの配置問題を修正することができました。 –

答えて

0

同じ問題が発生し、ちょうどbase.OnRender(g);と呼んでも私のために修正されていませんでした。あなたが提供した答えで行われたように、GMapMarkerの代わりにGMarkerGoogleから派生することです

また、テキストレンダリングでいくつかの調整が必要でした。

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 
} 
関連する問題