我一直在使用 Gmap.Net 控制器开发 Windows 窗体应用程序,但每次我尝试添加新标记时,它都会转到错误的位置。
我在这里看到了一个类似的问题,说当地图被缩放时,标记会转到正确的位置,但我想修复它,因为如果我在添加标记作为该问题的答案之前简单地添加地图的叠加层,它就不起作用,那就是为什么这不是一个重复的问题,因为我想要一个不同的解决方案。
如何解决我创建的全局列表中标记位置错误的问题?
例如: 我从这个特定地点的谷歌地图中获得了坐标(-22.913715,-43.164096):
但是当我尝试在我的 Gmap.Net 应用程序上添加相同的坐标时,标记会出现在错误的位置,如下所示:
所以我真的不知道我创建的全局标记列表是否工作正常。
这是我的代码:
using GMap.NET;
using GMap.NET.MapProviders;
using GMap.NET.WindowsForms;
using GMap.NET.WindowsForms.Markers;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BarcoSolar_UFF
{
public partial class Form1 : Form
{
//Create a global list
List<PointLatLng> Pontos = new List<PointLatLng>();
public Form1()
{
InitializeComponent();
gMapControl1.MapProvider = GMapProviders.GoogleMap;
gMapControl1.MinZoom = 0;
gMapControl1.MaxZoom = 24;
gMapControl1.Zoom = 10;
gMapControl1.SetPositionByKeywords("niteroi");
gMapControl1.ShowCenter = false;
gMapControl1.DragButton = MouseButtons.Left;
}
//Function to remove all the Markers
public void button1_Click(object sender, EventArgs e)
{
//Clean the map
gMapControl1.Overlays.Clear();
//Clean the list of markers
Pontos.Clear();
//Updates the map
atualizarMapa();
}
private void gMapControl1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void atualizarMapa()
{
//Clean the map
gMapControl1.Overlays.Clear();
//Create a new overlay
GMapOverlay markersOverlay = new GMapOverlay("markers");
foreach (PointLatLng p in Pontos)
{
//Create a red marker
GMarkerGoogle marker1 = new GMarkerGoogle(p, GMarkerGoogleType.red);
//Add a marker on the overlay
markersOverlay.Markers.Add(marker1);
}
//Add the overlay on the gMapControl1(Map)
gMapControl1.Overlays.Add(markersOverlay);
//gMapControl1.UpdateMarkerLocalPosition(marker);
}
//Function to Add Markers
private void button1_Click_1(object sender, EventArgs e)
{
//Leitura de variavel formato .txt
string Lat_s = textBox1.Text;
string Lng_s = textBox2.Text;
//Convert to Double
double Lat = double.Parse(Lat_s);
double Lng = double.Parse(Lng_s);
//Add Markers to a Global List
PointLatLng ponto = new PointLatLng(Lat, Lng);
Pontos.Add(ponto);
atualizarMapa();
}
//Add the Route on the Map
private void button1_Click_2(object sender, EventArgs e)
{
GMapOverlay polyOverlay = new GMapOverlay("polygons");
GMapPolygon polygon = new GMapPolygon(Pontos, "rota");
polygon.Fill = new SolidBrush(Color.Transparent);
float[] dashValues = { 5, 5 };
polygon.Stroke = new Pen(Color.Red, 1);
polygon.Stroke.DashPattern = dashValues;
polyOverlay.Polygons.Add(polygon);
gMapControl1.Overlays.Add(polyOverlay);
}
}
}