Skip to main content
All docs
V25.1
  • AzureTrafficIncidentDataProvider Class

    Allows you to communicate with the Azure Maps service to obtain information about traffic incidents and display them on the map.

    Namespace: DevExpress.Xpf.Map

    Assembly: DevExpress.Xpf.Map.v25.1.dll

    NuGet Package: DevExpress.Wpf.Map

    Declaration

    public class AzureTrafficIncidentDataProvider :
        AzureMapDataProviderBase

    Remarks

    The AzureTrafficIncidentDataProvider allows you to obtain information about traffic incidents from the Azure Maps service. Assign such an object to the InformationLayer.DataProvider property to enable the service’s access to traffic incident information, and display incidents on the map. Specify AzureKey to access data from Azure Maps. A key is obtained when you create an Azure Maps account.

    Azure Maps services support JSON response formats. Install the System.Text.Json package in projects that target .NET Framework to parse the Azure server response and display information on a DevExpress Map control.

    Call the provider’s RequestTrafficIncidents method to receive a list of incidents. The AzureRouteOptions parameter allows you to specify traffic incident options.

    The following code displays traffic incidents that occurred in the specified area:

    DevExpress MapControl for WPF - Traffic incidents

    <Window xmlns:dxm="http://schemas.devexpress.com/winfx/2008/xaml/map"...>
        <Window.Resources>
            <sys:String x:Key="azureKey">Your AzureMap key here</sys:String>
        </Window.Resources>
        <Grid>
            <dxm:MapControl Loaded="MapControl_Loaded" x:Name="mapControl"
                            ToolTipEnabled="True" ShowSearchPanel="False" ZoomLevel="3">
                <dxm:MapControl.ZoomTrackbarOptions>
                    <dxm:ZoomTrackbarOptions Visible="False" />
                </dxm:MapControl.ZoomTrackbarOptions>
                <dxm:ImageLayer>
                    <dxm:AzureMapDataProvider AzureKey="{StaticResource azureKey}" Tileset="BaseRoad"/>
                </dxm:ImageLayer>
                <dxm:InformationLayer x:Name="infoLayer">
                    <dxm:AzureTrafficIncidentDataProvider AzureKey="{StaticResource azureKey}" x:Name="trafficIncidentProvider"
                                                          LayerItemsGenerating="OnLayerItemsGenerating"/>
                </dxm:InformationLayer>
            </dxm:MapControl>
        </Grid>
    </Window>
    
    using DevExpress.Xpf.Map;
    using System.Windows;
    
    namespace WpfMapExample {
        public partial class MainWindow : Window {
            public MainWindow() {
                InitializeComponent();
            }
            private void MapControl_Loaded(object sender, RoutedEventArgs e) {
                trafficIncidentProvider.RequestTrafficIncidents(
                    new SearchBoundingBox { WestLongitude = - 115.338457, NorthLatitude = 36.268745, EastLongitude = - 114.988268, SouthLatitude = 36.1010376 }, 
                    boundingZoom: 18, 
                    trafficModelId: -1,
                    new AzureTrafficIncidentOptions {
                        OriginalPosition = false,
                        IncidentGeometryType = AzureTrafficIncidentGeometryType.Shifted
                    });
            }
            private void OnLayerItemsGenerating(object sender, LayerItemsGeneratingEventArgs args) {
                mapControl.ZoomToFit(args.Items);
            }
        }
    }
    

    Obtain and Display a List of Traffic Incidents

    After you obtain a list of incidents in the RequestTrafficIncidents method, the provider raises the TrafficIncidentCalculated event. You can handle the event to access the collection of received incidents or add custom logic.

    This example obtains a list of incidents in the specified area from the Azure Maps service and displays information about obtained incidents in a ListBoxEdit:

    DevExpress MapControl for WPF - Traffic incident infos

    <Window xmlns:dxm="http://schemas.devexpress.com/winfx/2008/xaml/map"...>
        <Window.Resources>
            <sys:String x:Key="azureKey">Your AzureMaps key here</sys:String>
        </Window.Resources>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="250"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <dxe:ListBoxEdit Grid.Column="0" x:Name="listbox"/>
            <dxm:MapControl Loaded="MapControl_Loaded" Grid.Column="1" x:Name="mapControl"
                            ToolTipEnabled="True" ShowSearchPanel="False" ZoomLevel="3">
                <dxm:MapControl.ZoomTrackbarOptions>
                    <dxm:ZoomTrackbarOptions Visible="False" />
                </dxm:MapControl.ZoomTrackbarOptions>
                <dxm:ImageLayer>
                    <dxm:AzureMapDataProvider AzureKey="{StaticResource azureKey}" Tileset="BaseRoad"/>
                </dxm:ImageLayer>
                <dxm:InformationLayer x:Name="infoLayer">
                    <dxm:AzureTrafficIncidentDataProvider AzureKey="{StaticResource azureKey}" x:Name="trafficIncidentProvider"
                                                          LayerItemsGenerating="OnLayerItemsGenerating" 
                                                          TrafficIncidentCalculated="trafficIncidentProvider_TrafficIncidentCalculated"/>
                </dxm:InformationLayer>
            </dxm:MapControl>
        </Grid>
    </Window>
    
    using DevExpress.Xpf.Map;
    using System.Text;
    using System.Windows;
    
    namespace WpfMapExample {
        public partial class MainWindow : Window {
            public MainWindow() {
                InitializeComponent();
            }
            private void MapControl_Loaded(object sender, RoutedEventArgs e) {
                trafficIncidentProvider.RequestTrafficIncidents(
                    new SearchBoundingBox { WestLongitude = - 115.338457, NorthLatitude = 36.268745, EastLongitude = - 114.988268, SouthLatitude = 36.1010376 }, 
                    boundingZoom: 18, 
                    trafficModelId: -1,
                    new AzureTrafficIncidentOptions {
                        OriginalPosition = false,
                        IncidentGeometryType = AzureTrafficIncidentGeometryType.Shifted
                    });
            }
            private void trafficIncidentProvider_TrafficIncidentCalculated(object sender, AzureTrafficIncidentCalculatedEventArgs e) {
                if (e.Cancelled) return;
                if (e.RequestResult.ResultCode != RequestResultCode.Success) {
                    listbox.Items.Add ("Traffic incidents were not found for this area.");
                    return;
                }
                StringBuilder resultList = new StringBuilder("");
                int resCounter = 1;
                foreach (AzureTrafficIncidentResult resultInfo in e.RequestResult.IncidentResults) {
                    resultList.Append(string.Format("Incident {0}:  \r\n", resCounter));
                    resultList.Append(string.Format("Cause: {0}\r\n", resultInfo.Cause));
                    resultList.Append(string.Format("Description: {0}\r\n", resultInfo.Description));
                    resultList.Append(string.Format("Start Time: {0}\r\n", resultInfo.StartDate));
                    resultList.Append(string.Format("End Time: {0}\r\n", resultInfo.EndDate));
                    resultList.Append(string.Format("Lat: {0}, Lon: {1}\r\n", resultInfo.Point.Latitude, resultInfo.Point.Longitude));
                    resultList.Append(string.Format("_______________________\r\n"));
                    resCounter++;
                }
                listbox.Items.Add(resultList.ToString());
            }
            private void OnLayerItemsGenerating(object sender, LayerItemsGeneratingEventArgs args) {
                mapControl.ZoomToFit(args.Items);
            }
        }
    }
    

    Implements

    See Also