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