Пользовательский маркер GMap Net OnMarkerClick является неточным - PullRequest
0 голосов
/ 11 февраля 2019

Я создал собственный дочерний класс GMapMarker, используя список точек и функции рисования / заполнения многоугольника, но обнаружил, что обнаружение «OnMarkerClick» не позволяет точно определить новую форму многоугольника.У меня есть пользователи, щелкающие по всему маркеру, и в некоторых местах они явно щелкают по правильному цветному местоположению, но оно регистрируется только в определенных частях.Есть также зелья от полигона, которые можно щелкнуть, чтобы выбрать маркер.Я даже изменил форму маркера, чтобы сделать его очень простой квадратной формой, что также было проблематично.Я бы сказал, что только 25% маркера кликабельны.

Нужно ли что-то добавить в мой код, чтобы поведение «OnMarkerClick» можно было ожидать?

ВотМой список точек для генерации квадрата:

static readonly Point[] Arrow = new Point[] { new Point(-15, 0), new Point(15, 0), new Point(15, 15), new Point(-15, 15) };

Вот часть "OnRender", которая рисует форму:

    public override void OnRender(Graphics g)
    {
        {
            g.TranslateTransform(ToolTipPosition.X, ToolTipPosition.Y);
            var c = g.BeginContainer();
            {
                //Testing without rotation
                //g.RotateTransform(Bearing - Overlay.Control.Bearing);
                g.ScaleTransform(Scale, Scale);
                g.FillPolygon(Fill, Arrow);
                g.DrawPolygon(pen, Arrow);
            }
            g.EndContainer(c);
            g.TranslateTransform(-ToolTipPosition.X, -ToolTipPosition.Y);

            if(caption != "")
            {
                var stringSize = g.MeasureString(caption, font);
                var localPoint = new PointF(LocalPosition.X - stringSize.Width / 2, LocalPosition.Y + stringSize.Height + 10);
                g.DrawString(caption, font, textFill, localPoint);
            }
        }
    }

Я обычно создаю экземпляр своего пользовательского объекта "стрелка" (хотя теперь это квадрат) и добавьте его в список маркеров на наложении маркеров:

        Demo.WindowsForms.CustomMarkers.GMarkerArrow marker = new Demo.WindowsForms.CustomMarkers.GMarkerArrow(new GMap.NET.PointLatLng(lat, longitude));
        markersOverlay.Markers.Add(marker);
...