Esempio n. 1
0
        protected override async Task <List <Coordinate>?> ExecuteRequestAsync(
            List <Coordinate> coordinates,
            CancellationToken cancellationToken)
        {
            var request = new SnapToRoadRequest
            {
                BingMapsKey            = APIKey,
                IncludeSpeedLimit      = false,
                IncludeTruckSpeedLimit = false,
                Interpolate            = true,
                SpeedUnit  = SpeedUnitType.MPH,
                TravelMode = TravelModeType.Driving,
                Points     = coordinates.Select(p => p.ToBingMapsCoordinate()).ToList()
            };

            var result = await request.Execute();

            if (result.StatusCode != 200)
            {
                Logger?.Error <string>("Snap to road request failed, message was '{0}'", result.StatusDescription);
                return(null);
            }

            var retVal = new List <Coordinate>();

            foreach (var resourceSet in result.ResourceSets)
            {
                var snapResponses = resourceSet.Resources
                                    .Where(r => r is SnapToRoadResponse)
                                    .Cast <SnapToRoadResponse>()
                                    .ToList();

                if (!snapResponses.Any())
                {
                    Logger?.Error("Snap to request did not return usable results");
                    return(null);
                }

                foreach (var snapResponse in snapResponses)
                {
                    retVal.AddRange(snapResponse.SnappedPoints
                                    .Select(p => new Coordinate(p))
                                    );
                }
            }

            return(retVal);
        }
        /// <summary>
        /// Demostrates how to make an Snap to Road Request.
        /// </summary>
        private void SnapToRoadBtn_Clicked(object sender, RoutedEventArgs e)
        {
            var r = new SnapToRoadRequest()
            {
                Points = new List <Coordinate>()
                {
                    new Coordinate(47.590868, -122.336729),
                    new Coordinate(47.601604, -122.336042),
                    new Coordinate(47.60849, -122.34241),
                    new Coordinate(47.610568, -122.345064)
                },
                IncludeSpeedLimit      = true,
                IncludeTruckSpeedLimit = true,
                Interpolate            = true,
                SpeedUnit   = SpeedUnitType.MPH,
                TravelMode  = TravelModeType.Driving,
                BingMapsKey = BingMapsKey
            };

            ProcessRequest(r);
        }