Как получить адрес, используя широту и долготу с gmap? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть форма Windows, и когда я набираю широту и долготу, она не отображает полный адрес в поле richtextbox.Вот мой код для кнопки поиска:

double lat = Convert.ToDouble(textBox8.Text);
double longt = Convert.ToDouble(textBox6.Text);
map.Position = new PointLatLng(lat, longt);
map.MinZoom = 5;
map.MaxZoom = 100;
map.Zoom = 10;

PointLatLng point = new PointLatLng(lat, longt);
GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.blue_dot);

GMapOverlay markers = new GMapOverlay("markers");
markers.Markers.Add(marker);
map.Overlays.Add(markers);

и вот мой код для загрузки формы:

GMaps.Instance.Mode = AccessMode.ServerAndCache;
map.CacheLocation = @"cache";
map.DragButton = MouseButtons.Left;
map.ShowCenter = false;
map.DragButton = MouseButtons.Left;
map.MapProvider = GMapProviders.GoogleMap;

1 Ответ

0 голосов
/ 12 октября 2018

Вам необходимо изменить геокодирование ваших координат.Во-первых, вам нужно добавить эти классы, чтобы десериализовать ответ обратного геокодирования.(Класс Result находится в пространстве имен GMap.NET.MapProviders.)

public class ReverseGeocodeResult
{
    public PlusCode plus_code { get; set; }
    public List<Result> results { get; set; }
    public string status { get; set; }
}

public class PlusCode
{
    public string compound_code { get; set; }
    public string global_code { get; set; }
}

Затем вы можете геокодировать координаты с помощью HttpClient, но вам понадобится ключ API Google с включенным API геокодирования.первый.Получите один здесь , если у вас его нет.

using (var c = new HttpClient())
{
    try
    {
        var result = await c.GetAsync("https://maps.googleapis.com/maps/api/geocode/json?latlng=" 
            + lat.ToString() + "," + longt.ToString() + "&key=YOUR_API_KEY");
        string content = await result.Content.ReadAsStringAsync();
        ReverseGeocodeResult results = JsonConvert.DeserializeObject<ReverseGeocodeResult>(content);
        if (results != null && results.results.Count > 0)
            richTextBox1.Text = results.results[0].formatted_address;
    }
    catch (Exception exc)
    {
        richTextBox1.Text = exc.ToString();
    }
}

Вот импорт, который нужно добавить в начало класса вашей формы:

using GMap.NET;
using GMap.NET.MapProviders;
using GMap.NET.WindowsForms;
using GMap.NET.WindowsForms.Markers;
using Newtonsoft.Json;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...