【问题标题】:GMap.NET how can I make an accurate routing?GMap.NET 我怎样才能做出准确的路由?
【发布时间】:2020-02-05 13:10:13
【问题描述】:

所以我要做的是使用 GMap.NET nugget 在 winforms 应用程序上显示路线。 但我遇到的问题是它没有显示使用道路的路线。它从字面上显示了 2 点之间的最短距离,所以为了更准确,我对谷歌地图方向做了一个额外的 API 调用。所以我有一些额外的点让它更准确,但仍然在 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);
        }
    }

这是我的地图的加载方式。

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

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

【问题讨论】:

  • 谢谢,但这似乎不是我遇到的问题。我认为问题出在我安装 GMap.NET 的 Nugget 包上
  • 链接说:distancematrix API 支持 travel_mode 作为参数 - 但是您的选项是驾驶、步行、骑自行车或过境,因此 API 无用。您使用的是旅行模式吗?
  • 我不为此使用 Distancematrix API。我使用 Directions API,因为 Distancematrix API 不会给我路线点,而方向 API 会。但是是的,我正在使用旅行模式作为驾驶。
  • 您是否按照建议尝试了几何库。

标签: c# winforms google-maps gmap.net


【解决方案1】:

仍然不清楚你为什么要打额外的电话。无论如何,要获得一条路线,只需要一个起点和终点位置并致电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,但你明白了。

【讨论】:

  • 我之所以对方向进行额外的 api 调用,是因为当我进行 GMapRoute() 时,我只会在 2 点之间得到直线。因此,通过方向呼叫,我添加了额外的点,以使路线更多地在道路上行驶。尝试了您的解决方案,但当我执行 GMapProviders.GoogleMap.GetDirections() 时,我收到了 REQUEST_DENIED,即使我添加了 API 密钥。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2020-11-23
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多