Gmap.net 无法使用 C# 通知显示多个标记



我想在地图上显示多标记,但似乎不能,代码如下:button1_Click显示位置,button2_Click显示标记!有人给我任何指示吗?谢谢。

 private void button1_Click(object sender, EventArgs e)
 {
    gmap.DragButton = MouseButtons.Left;
    gmap.MapProvider = GMapProviders.GoogleMap;
    gmap.Position = new PointLatLng(25.037531, 121.5639969);
    gmap.MinZoom = 5;
    gmap.MaxZoom = 100;
    gmap.ShowCenter = false;
    gmap.Zoom = 15;
 }
 private void button2_Click(object sender, EventArgs e)
 {
        Random r = new Random();
        var marker = new GMarkerGoogle(new PointLatLng(r.Next(25, 500), 121), GMarkerGoogleType.green);
        var marker1 = new GMarkerGoogle(new PointLatLng(r.Next(25, 500), 121), GMarkerGoogleType.pink);
        var marker2 = new GMarkerGoogle(new PointLatLng(r.Next(25, 500), 121), GMarkerGoogleType.blue);
        var marker3 = new GMarkerGoogle(new PointLatLng(r.Next(25, 500), 121), GMarkerGoogleType.yellow);
        marker.IsVisible = true; marker1.IsVisible = true; marker2.IsVisible = true; marker3.IsVisible = true;
        gMapOverlay.Markers.Add(marker); 
        gMapOverlay.Markers.Add(marker1);
        gMapOverlay.Markers.Add(marker2); 
        gMapOverlay.Markers.Add(marker3);
        gmap.Overlays.Add(gMapOverlay);  
   } 

你的代码没问题,但是你使用的随机函数的问题只生成整数,而 1 个整数的微小变化意味着改变纬度或经度的完整度数,这是一个 hudge 位移。

因此,您必须生成一个随机的双精度数而不是整数

我编辑代码以正常工作。

using GMap.NET;
using GMap.NET.WindowsForms.Markers;
public class Form1
{
    private GMap.NET.WindowsForms.GMapOverlay gMapOverlay;
    private Random rand = new Random();
    private void Form1_Load(object sender, EventArgs e)
    {
        GMapControl1.DragButton = MouseButtons.Left;
        GMapControl1.MapProvider = GMap.NET.MapProviders.GMapProviders.GoogleMap;
        GMapControl1.Position = new PointLatLng(25.037531, 121.5639969);
        GMapControl1.MinZoom = 5;
        GMapControl1.MaxZoom = 20;
        GMapControl1.ShowCenter = false;
        GMapControl1.Zoom = 11;
        gMapOverlay = new WindowsForms.GMapOverlay("markers");
        gMapOverlay.IsVisibile = true;
    }
    private void button2_Click(object sender, EventArgs e)
    {
        var marker = new GMarkerGoogle(new PointLatLng(GetRandomDouble(24.8, 25.1), GetRandomDouble(121.3, 121.6)), GMarkerGoogleType.green);
        var marker1 = new GMarkerGoogle(new PointLatLng(GetRandomDouble(24.8, 25.1), GetRandomDouble(121.3, 121.6)), GMarkerGoogleType.pink);
        var marker2 = new GMarkerGoogle(new PointLatLng(GetRandomDouble(24.8, 25.1), GetRandomDouble(121.3, 121.6)), GMarkerGoogleType.blue);
        var marker3 = new GMarkerGoogle(new PointLatLng(GetRandomDouble(24.8, 25.1), GetRandomDouble(121.3, 121.6)), GMarkerGoogleType.yellow);
        marker.IsVisible = true;
        marker1.IsVisible = true;
        marker2.IsVisible = true;
        marker3.IsVisible = true;
        //   Clear old markers
        gMapOverlay.Markers.Clear();
        gMapOverlay.Markers.Add(marker);
        gMapOverlay.Markers.Add(marker1);
        gMapOverlay.Markers.Add(marker2);
        gMapOverlay.Markers.Add(marker3);
        //   Clear old overlay
        GMapControl1.Overlays.Clear();
        GMapControl1.Overlays.Add(gMapOverlay);
        //   Zoom the map to show all drawn markers
        GMapControl1.ZoomAndCenterMarkers(gMapOverlay.Id);
    }
    public double GetRandomDouble(double min, double max)
    {
        return rand.NextDouble() * (max - min) + min;
    }

最新更新