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