GMap. NET как мне сделать точную маршрутизацию? - PullRequest
0 голосов
/ 05 февраля 2020

Итак, я пытаюсь показать маршрут в приложении winforms, использующем GMap. NET nugget . Но проблема, с которой я столкнулся, заключается в том, что он не показывает маршрут с использованием дорог. Он буквально показывает кратчайшие расстояния между двумя точками, поэтому, чтобы сделать его более точным, я сделал дополнительный вызов API для карт Google Directions. Поэтому у меня есть несколько дополнительных точек, чтобы сделать его более точным, но все же между 2 точками это просто прямая линия, а не на дорогах.

проблема маршрута

Здесь вы можете увидеть как я загружаю очки.

public void ShowRoute(Coordinate[] coordinates)
    {
        if (coordinates.Length > 1)
        {
            List<PointLatLng> points = new List<PointLatLng>();

            foreach (var cor in coordinates)
            {
                Coordinate c = geo.ConvertCoordinates(cor);
                var corstring = geo.GetAdresByCor(c);
                var point = new PointLatLng(Convert.ToDouble(c.Latitude.Replace(".", ",")), Convert.ToDouble(c.Longitude.Replace(".", ",")));
                var marker = new GMarkerGoogle(point, GMarkerGoogleType.pink_pushpin);
                routeMarkers.Markers.Add(marker);
            }
            var routes = geo.DirectionsByCor(coordinates);

            foreach (var route in routes)
            {

                foreach (var step in route.Legs[0].Steps)
                {
                    var point = new PointLatLng(step.EndLocation.Latitude, step.EndLocation.Longitude);
                    points.Add(point);
                }
            }
            var r = new GMapRoute(points, "route");
            var routesOverlay = new GMapOverlay("routes");
            routesOverlay.Routes.Add(r);
            map.Overlays.Add(routeMarkers);
            map.Overlays.Add(routesOverlay);
        }
    }

Вот как загружается моя Карта.

 private void map_Load(object sender, EventArgs e)
    {
        GMapProviders.GoogleMap.ApiKey = Properties.Settings.Default.ApiKey;


        geo = new GeocoderXY();
        map.MouseWheelZoomEnabled = true;
        map.DragButton = MouseButtons.Left;
        map.MapProvider = GMapProviders.GoogleMap;
        lng = 3.7074218;
        lat = 51.008157;

        GMapMarker marker = new GMarkerGoogle(new PointLatLng(lat, lng), GMarkerGoogleType.blue_pushpin);
        searchMarker = marker;

        markers.Markers.Add(marker);
        markers.Markers.Add(mouseMarker);

        map.Position = new NET.PointLatLng(lat, lng);
        map.MouseWheelZoomType = NET.MouseWheelZoomType.MousePositionWithoutCenter;
        map.MinZoom = 5;
        map.MaxZoom = 100;
        map.Zoom = 15;
        map.ShowCenter = false;
    }

Я не вижу, что я делаю неправильно, если кто-то видит это, пожалуйста, дайте мне знать! Спасибо

1 Ответ

0 голосов
/ 05 февраля 2020

Тем не менее, непонятно, почему вы делаете дополнительные звонки. В любом случае, чтобы получить маршрут, все, что ему нужно, это начальные и конечные местоположения и позвоните GetDirections (очевидно, GoogleMapProvider устарело):

GDirections myDirections;
var route = GMapProviders.GoogleMap.GetDirections(out myDirections, start, end, false, false, false, false, false);

, затем используйте направления для рисования

var route = new GMapRoute(myDirections.Route, "route");
var routesOverlay = new GMapOverlay("routes");
routesOverlay.Routes.Add(route);

К сожалению, у меня нет VS для тестирования, но у вас есть идея.

...