0

は を有効にしてrouteService.CalculateRoute(routeRequest)いないようrouteRequest.Optionsです。RouteOptimization.MinimizeDistance設定を試みRouteOptimization.MinimizeTime;ましたが、どちらも最適なルートに調整されていないようです。CalculateRoute は、ウェイポイントの配列内の順序に応じて、常にウェイポイントを計算するだけのようです。私が間違っていることを誰かが知っていますか?

            Waypoint[] waypoints = new Waypoint[waypointInfo.Count + 1]; // +1 for the store

            waypoints[0] = new Waypoint();
            waypoints[0].Description = "Store";
            waypoints[0].Location = new RouteService.Location();
            waypoints[0].Location.Latitude = store.Latitude;
            waypoints[0].Location.Longitude = store.Longitude;

            for (int i = 0; i < waypointInfo.Count; i++)
            {
                waypoints[i+1] = new Waypoint();
                waypoints[i + 1].Description = waypointInfo[i].Address+ " - " +waypointInfo[i].Name;
                waypoints[i+1].Location = new RouteService.Location();
                waypoints[i + 1].Location.Latitude = waypointInfo[i].locations.Latitude;
                waypoints[i + 1].Location.Longitude = waypointInfo[i].locations.Longitude;

            }



            RouteRequest routeRequest = new RouteRequest();
            routeRequest.Credentials = new Microsoft.Maps.MapControl.WPF.Credentials();
            routeRequest.Credentials.ApplicationId = "BING API KEY";

            // You want minimum distance or minimum time?
            RouteOptions myROuteOptions = new RouteOptions();
            myROuteOptions.Mode = TravelMode.Driving;
            myROuteOptions.Optimization = RouteOptimization.MinimizeDistance;
            myROuteOptions.TrafficUsage = TrafficUsage.TrafficBasedTime;
            routeRequest.Options = myROuteOptions;

            //routeRequest.UserProfile = new UserProfile { DistanceUnit = RouteService.DistanceUnit.Kilometer };

            routeRequest.Waypoints = waypoints;

            // Make the calculate route request
            RouteServiceClient routeService = new RouteServiceClient();
            RouteResponse routeResponse = routeService.CalculateRoute(routeRequest);



            double dayDistance = 0;               
            directions.Clear();

            if (routeResponse.Result.Legs.Length > 0)
            {
                int instructionCount = 0;
                int legCount = 0;

                foreach (RouteLeg leg in routeResponse.Result.Legs)
                {

                    legCount++;
                    if (legCount > 1)
                    {
                        directions.Append(" " + "\n");
                    }

                    foreach (ItineraryItem item in leg.Itinerary)
                    {

                        instructionCount++;
                        directions.Append(string.Format("{0}. {1} {2}\n",
                            instructionCount, item.Summary.Distance, item.Text));
                        dayDistance += item.Summary.Distance;
                    }
                }

}

4

3 に答える 3

1

The waypointsあなたが使用したことは、あなたが言ったことを正確に行います。彼らはBingに、ルートはまさにこの順序であるべきだと言います。したがって、それは完全に機能し、何も悪いことはしていません。

http://msdn.microsoft.com/en-us/library/cc966873.aspx

于 2013-07-17T20:36:34.793 に答える
1

CalculateRoute がウェイポイントの順序を変更することはないと思います。RouteOptimization は、指定されたルートの任意の 2 つの連続するウェイポイント間で選択されるパスにのみ影響します。

于 2013-07-18T20:05:18.983 に答える
0

あなたの場合、ルートが通過しなければならないポイントを修正します。「開始」と「終了」の間に過度のウェイポイントを与えない場合、最適化の違いを見ることができます。

私はあなたのコードを試しましたが、エンドポイントをパラメーターとして渡す必要があると言われています:

RouteServiceClient routeService = new RouteServiceClient("Here");

これを修正する方法

于 2014-03-13T21:28:03.577 に答える