winforms GMap.NET如何才能做出准确的路由选择?

zz2j4svz  于 2022-12-23  发布在  .NET
关注(0)|答案(1)|浏览(120)

所以我想做的是用GMap.NET nugget在winforms应用程序上显示一条路线,但我遇到的问题是它没有用道路来显示路线,它只是显示两点之间的最短距离。所以为了让它更准确,我做了一个额外的API调用谷歌Map方向。所以我有一些额外的点,使它更准确,但仍然在2点之间它只是一条直线,而不是在道路上。
route problem
在这里你可以看到我是如何加载点。

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);
        }
    }

以下是如何加载我的Map。

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;
    }

我不知道我做错了什么,如果有人看到了,请告诉我!谢谢

dced5bon

dced5bon1#

我们仍然不清楚为什么要做额外的调用,无论如何,要获得一条路线,只需要一个起点和终点位置,然后调用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测试,但你得到的想法。

相关问题