このAPIについてよく読んでいます。私はそれで始めていますし、最終的に私はこのコードを使用してマップにMouseDownイベントを使用してクリックすることにより、マーカーを置くことを実現:GMAP.NET - 地図をクリックすると、地図のX、Y座標にマーカーが表示されます
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;
using GMap.NET.MapProviders;
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.WindowsForms.Markers;
using System.Globalization;
namespace GMapApplicationCSharp
{
public partial class Form1 : Form
{
//GMarkerGoogle marker;
GMapOverlay markers = new GMapOverlay("markers");
public Form1()
{
InitializeComponent();
}
private void mapaButton_Click(object sender, EventArgs e)
{
mapa.DragButton = MouseButtons.Left;
mapa.CanDragMap = true;
mapa.MapProvider = GMapProviders.GoogleMap;
mapa.SetPositionByKeywords("Madrid, Spain");
mapa.MinZoom = 0;
mapa.MaxZoom = 24;
mapa.Zoom = 9;
mapa.AutoScroll = true;
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache;
//mapa.Overlays.Add(markers);
}
private void recargaMapaButton_Click(object sender, EventArgs e)
{
if (IsMapas.Text == "Google Maps Satélite")
mapa.MapProvider = GMapProviders.GoogleSatelliteMap;
if (IsMapas.Text == "Google Maps Callejero")
mapa.MapProvider = GMapProviders.GoogleMap;
if (IsMapas.Text == "Google Maps Híbrido")
mapa.MapProvider = GMapProviders.GoogleHybridMap;
if (IsMapas.Text == "OpenStreetMap")
mapa.MapProvider = GMapProviders.OpenStreetMap;
if (IsMapas.Text == "OpenCycleMap")
mapa.MapProvider = GMapProviders.OpenCycleMap;
mapa.Refresh();
}
//private void mapa_MouseClick(object sender, MouseEventArgs e)
//{
//double lat;
//double lng;
//if (e.Button == System.Windows.Forms.MouseButtons.Left)
//{
// lat = mapa.FromLocalToLatLng(e.X, e.Y).Lat;
// lng = mapa.FromLocalToLatLng(e.X, e.Y).Lng;
// GMapOverlay markers = new GMapOverlay("markers");
// GMapMarker marker = new GMarkerGoogle(new PointLatLng(lat, lng), GMarkerGoogleType.blue_pushpin);
// markers.Markers.Add(marker);
// mapa.Overlays.Add(markers);
// Console.WriteLine("LAT: ");
// Console.WriteLine(lat);
// Console.WriteLine("LON: ");
// Console.WriteLine(lng);
//}
//}
//private void SetMarcadorButton_Click(object sender, EventArgs e)
//{
//}
private void mapa_MouseDown(object sender, MouseEventArgs e)
{
//double lat;
//double lng;
//lat = Convert.ToDouble(LatitudTextBox.Text);
//lng = Convert.ToDouble(LongitudTextBox.Text);
//GMapOverlay markers = new GMapOverlay("markers");
//GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(lat, lng), GMarkerGoogleType.blue_pushpin);
//markers.Markers.Add(marker);
//mapa.Overlays.Add(markers);
//base.OnMouseMove(e);
//Application.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
double X = mapa.FromLocalToLatLng(e.X, e.Y).Lng;
double Y = mapa.FromLocalToLatLng(e.X, e.Y).Lat;
//string longitude = X.ToString();
//string latitude = Y.ToString();
//LatitudTextBox.Text = Convert.ToString(double.Parse(latitude, CultureInfo.InvariantCulture));
//LongitudTextBox.Text = Convert.ToString(double.Parse(longitude, CultureInfo.InvariantCulture));
GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(Y, X), GMarkerGoogleType.blue_pushpin);
markers.Markers.Add(marker);
mapa.Overlays.Add(markers);
}
}
}
すべてのコメント行のために申し訳ありません
..
を私の問題は最初のことです地図をクリックすると、常に地図の中央に最初のマーカーが置かれます。なぜか分かりませんが、最初のクリックでのみ発生します。なぜなら、次のクリックでは、クリックしている座標のマーカーが表示されるからです。
多分私は見ていないことがありますか?最初のクリックで常にマーカーが中央に表示されるのはなぜですか?
また、誰かが知っていれば、アプリケーションをオフラインで使用するには、キャッシュにマップを保存する方法がありますか?たぶん、いくつかの機能やそのようなものがあります。私は "ServerOnly"、 "ServerAndCache"、 "CacheOnly"の機能を調べていますが、正しく使用する方法はわかりません。私がインターネットでない場所で私のアプリケーションをどこかで使用したいとします。
編集: ここで私はVB.NETでコードを残しています(もう1つは他のものです)。
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms
Imports GMap.NET.MapProviders
Imports GMap.NET
Imports GMap.NET.WindowsForms
Imports GMap.NET.WindowsForms.Markers
Imports System.Globalization
Public Class Form1
Dim markers As GMapOverlay = New GMapOverlay("markers")
Private Sub CargarButton_Click(sender As Object, e As EventArgs) Handles CargarButton.Click
mapa.DragButton = Windows.Forms.MouseButtons.Left
mapa.CanDragMap = True
mapa.MapProvider = GMapProviders.GoogleMap
mapa.SetPositionByKeywords("Madrid, Spain")
mapa.MinZoom = 0
mapa.MaxZoom = 24
mapa.Zoom = 9
mapa.AutoScroll = True
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache
End Sub
Private Sub mapa_MouseDown(sender As Object, e As MouseEventArgs) Handles mapa.MouseDown
Dim X As Double = mapa.FromLocalToLatLng(e.X, e.Y).Lng
Dim Y As Double = mapa.FromLocalToLatLng(e.X, e.Y).Lat
Dim marker As GMarkerGoogle = New GMarkerGoogle(New PointLatLng(Y, X), GMarkerGoogleType.green)
markers.Markers.Add(marker)
mapa.Overlays.Add(markers)
End Sub
End Class
ちょうどあなたが何を提案する!最初に、マーカーの後のオーバーレイ。私が理解できないことは、インターネット上のすべての例で、誰もが最初にマーカーを置く理由です。どうもありがとう! –