Back to Devexpress

AzureRouteDataProvider.RouteCalculated Event

windowsforms-devexpress-dot-xtramap-dot-azureroutedataprovider.md

latest11.0 KB
Original Source

AzureRouteDataProvider.RouteCalculated Event

Occurs when route calculation is complete.

Namespace : DevExpress.XtraMap

Assembly : DevExpress.XtraMap.v25.2.dll

NuGet Package : DevExpress.Win.Map

Declaration

csharp
public event AzureRouteCalculatedEventHandler RouteCalculated
vb
Public Event RouteCalculated As AzureRouteCalculatedEventHandler

Event Data

The RouteCalculated event's data class is AzureRouteCalculatedEventArgs. The following properties provide information specific to this event:

PropertyDescription
CalculationResultReturns the result of a route calculation.
CancelledGets a value indicating whether an asynchronous operation has been canceled. Inherited from AsyncCompletedEventArgs.
ErrorGets a value indicating which error occurred during an asynchronous operation. Inherited from AsyncCompletedEventArgs.
UserStateGets the unique identifier for the asynchronous task. Inherited from AsyncCompletedEventArgs.

The event data class exposes the following methods:

MethodDescription
RaiseExceptionIfNecessary()Raises a user-supplied exception if an asynchronous operation failed. Inherited from AsyncCompletedEventArgs.

Remarks

The following example displays detailed information about the calculated route:

The button click initiates the routing request. The CalculateRoute method is called in the button click event handler.

The RouteCalculated event is handled to process the request result. e.CalculationResult gets the AzureRouteCalculationResult object that contains the result of the route calculation and allow you to obtain the following information:

csharp
using DevExpress.XtraMap;
using System.Text;
// ...
const string key = "your key";
// ...
routeProvider = new AzureRouteDataProvider { AzureKey = key };
routeProvider.RouteCalculated += OnRouteCalculated;
// ...
private void OnCalculateRoutesClick(object sender, EventArgs e) {
    List<RouteWaypoint> waypoints = new List<RouteWaypoint>();
    waypoints.Add(new RouteWaypoint("NY", new GeoPoint(41.145556, -73.995)));
    waypoints.Add(new RouteWaypoint("Oklahoma", new GeoPoint(36.131389, -95.937222)));
    waypoints.Add(new RouteWaypoint("Las Vegas", new GeoPoint(36.175, -115.136389)));
    routeProvider.CalculateRoute(waypoints, new AzureRouteOptions() {
        TravelMode = AzureTravelMode.Car
    });
}
private void OnRouteCalculated(object sender, AzureRouteCalculatedEventArgs e) {
    AzureRouteCalculationResult result = e.CalculationResult;
    if ((result.RouteResults == null) ||
        (result.ResultCode == RequestResultCode.BadRequest)) {
        MessageBox.Show("The Azure Route service does not work for this location.");
        return;
    }
    StringBuilder resultList = new StringBuilder("");
    if (result.IntermediatePoints != null) {
        resultList.Append(String.Format(" _________________________ \n"));
        for (int i = 0; i < e.CalculationResult.IntermediatePoints.Count; i++)
            resultList.Append(
                String.Format("Waypoint {0}: {1} ({2})\n",
                i + 1,
                e.CalculationResult.IntermediatePoints[i].Description,
                e.CalculationResult.IntermediatePoints[i].Location)
            );
    }
    if (result.RouteResults != null) {
        for (int rnum = 0; rnum < e.CalculationResult.RouteResults.Count; rnum++) {
            var routeSummary = e.CalculationResult.RouteResults[rnum].Summary;
            resultList.AppendLine(" _________________________");
            resultList.AppendLine($"Path {rnum + 1} summary:");
            resultList.AppendLine($"Travel Distance: {GetDistanceString(routeSummary)}");
            resultList.AppendLine($"Travel Time: {GetTravelTimeString(routeSummary)}");
            if (e.CalculationResult.RouteResults[rnum].Legs != null){
                int legNum = 1;
                foreach (AzureRouteLeg leg in e.CalculationResult.RouteResults[rnum].Legs){
                    resultList.AppendLine($"\tLeg {legNum++}");
                    resultList.AppendLine($"\tDistance: {GetDistanceString(leg.Summary)}");
                    resultList.AppendLine($"\tTravel Time: {GetTravelTimeString(leg.Summary)}");
                    resultList.AppendLine($"\tDeparture Time: {leg.Summary.Departure}");
                    resultList.AppendLine($"\tArrival Time: {leg.Summary.Arrival}");
                    resultList.AppendLine($"\tDeviation Time: {leg.Summary.DeviationTime}");
                }
            }
        }
    }
    MessageBox.Show(resultList.ToString());
}
static string GetTravelTimeString(AzureRouteSummary summary) {
    var timeSpan = TimeSpan.FromSeconds(summary.TravelTimeSeconds);
    return $"{timeSpan.Days}d, {timeSpan.Hours}hr, {timeSpan.Minutes}min";
}
static string GetDistanceString(AzureRouteSummary summary) {
return String.Format("{0:0.00}km", (double)summary.TravelLengthMeters / 1000);
}
vb
Imports DevExpress.XtraMap
Imports System.Text
' ...
Private Const key As String = "your key"
' ...
routeProvider = New AzureRouteDataProvider With {.AzureKey = key}
AddHandler routeProvider.RouteCalculated, AddressOf OnRouteCalculated
' ...
Private Sub OnCalculateRoutesClick(ByVal sender As Object, ByVal e As EventArgs)
    Dim waypoints As New List(Of RouteWaypoint)()
    waypoints.Add(New RouteWaypoint("NY", New GeoPoint(41.145556, -73.995)))
    waypoints.Add(New RouteWaypoint("Oklahoma", New GeoPoint(36.131389, -95.937222)))
    waypoints.Add(New RouteWaypoint("Las Vegas", New GeoPoint(36.175, -115.136389)))
    routeProvider.CalculateRoute(waypoints, New AzureRouteOptions() With {.TravelMode = AzureTravelMode.Car})
End Sub
Private Sub OnRouteCalculated(ByVal sender As Object, ByVal e As AzureRouteCalculatedEventArgs)
    Dim result As AzureRouteCalculationResult = e.CalculationResult
    If (result.RouteResults Is Nothing) OrElse (result.ResultCode = RequestResultCode.BadRequest) Then
        MessageBox.Show("The Azure Route service does not work for this location.")
        Return
    End If
    Dim resultList As New StringBuilder("")
    If result.IntermediatePoints IsNot Nothing Then
        resultList.Append(String.Format(" _________________________" & vbLf))
        For i As Integer = 0 To e.CalculationResult.IntermediatePoints.Count - 1
            resultList.Append(String.Format("Waypoint {0}: {1} ({2})" & vbLf, i + 1, e.CalculationResult.IntermediatePoints(i).Description, e.CalculationResult.IntermediatePoints(i).Location))
        Next i
    End If
    If result.RouteResults IsNot Nothing Then
        For rnum As Integer = 0 To e.CalculationResult.RouteResults.Count - 1
            Dim routeSummary = e.CalculationResult.RouteResults(rnum).Summary
            resultList.AppendLine(" _________________________")
            resultList.AppendLine($"Path {rnum + 1} summary:")
            resultList.AppendLine($"Travel Distance: {GetDistanceString(routeSummary)}")
            resultList.AppendLine($"Travel Time: {GetTravelTimeString(routeSummary)}")
            If e.CalculationResult.RouteResults(rnum).Legs IsNot Nothing Then
                Dim legNum As Integer = 1
                For Each leg As AzureRouteLeg In e.CalculationResult.RouteResults(rnum).Legs
                    resultList.AppendLine($vbTab & "Leg {legNum++}")
                    resultList.AppendLine($vbTab & "Distance: {GetDistanceString(leg.Summary)}")
                    resultList.AppendLine($vbTab & "Travel Time: {GetTravelTimeString(leg.Summary)}")
                    resultList.AppendLine($vbTab & "Departure Time: {leg.Summary.Departure}")
                    resultList.AppendLine($vbTab & "Arrival Time: {leg.Summary.Arrival}")
                    resultList.AppendLine($vbTab & "Deviation Time: {leg.Summary.DeviationTime}")
                Next leg
            End If
        Next rnum
    End If
    MessageBox.Show(resultList.ToString())
End Sub
Shared Function GetTravelTimeString(ByVal summary As AzureRouteSummary) As String
    Dim timeSpan = System.TimeSpan.FromSeconds(summary.TravelTimeSeconds)
    Return $"{timeSpan.Days}d, {timeSpan.Hours}hr, {timeSpan.Minutes}min"
End Function
Shared Function GetDistanceString(ByVal summary As AzureRouteSummary) As String
Return String.Format("{0:0.00}km", CDbl(summary.TravelLengthMeters) / 1000)
End Function

See Also

AzureRouteDataProvider Class

AzureRouteDataProvider Members

DevExpress.XtraMap Namespace