windowsforms-devexpress-dot-xtramap-8e2f05da.md
A data adapter that loads data from SVG files, and displays it on vector layers.
Namespace : DevExpress.XtraMap
Assembly : DevExpress.XtraMap.v25.2.dll
NuGet Package : DevExpress.Win.Map
public class SvgFileDataAdapter :
FileDataAdapterBase,
ISvgPointConverterFactory
Public Class SvgFileDataAdapter
Inherits FileDataAdapterBase
Implements ISvgPointConverterFactory
SVG is a two-dimensional vector graphic format that uses an XML-based text format to describe images.
The image below shows a vector map loaded from an SVG file.
The following table lists supported SVG elements and related map items:
|
SVG element
|
Map item
| | --- | --- | |
<circle>
|
| |
<ellipse>
|
| |
<line>
|
| |
<path>
(M,m,L,l,H,h,V,v,Z,z commands are supported)
|
| |
<polyline>
|
| |
<polygon>
|
| |
<rect>
|
|
Note
The Map Control does not support the style element and style tag in the SVG markup.
Follow the steps below to load data from an SVG file:
Create a new SvgFileDataAdapter object.
Use the SvgFileDataAdapter.FileUri property to specify the path to an SVG file.
Assign the adapter to the VectorItemsLayer.Data property.
private void Form1_Load(object sender, EventArgs e) {
Uri baseUri = new Uri(System.Reflection.Assembly.GetExecutingAssembly().Location);
mapControl1.Layers.Add(new VectorItemsLayer {
Data = new SvgFileDataAdapter {
FileUri = new Uri(baseUri, "..\\..\\Data\\countries.svg")
}
});
}
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Dim baseUri As New Uri(System.Reflection.Assembly.GetExecutingAssembly().Location)
mapControl1.Layers.Add(New VectorItemsLayer With { _
.Data = New SvgFileDataAdapter With {.FileUri = New Uri(baseUri, "..\..\Data\countries.svg")} _
})
End Sub
When vector items are loaded, the FileDataAdapterBase.ItemsLoaded event occurs. Use the e.Items property to access map items.
private void Form1_Load(object sender, EventArgs e) {
Uri baseUri = new Uri(System.Reflection.Assembly.GetExecutingAssembly().Location);
SvgFileDataAdapter adapter = new SvgFileDataAdapter();
adapter.FileUri = new Uri(baseUri, "..\\..\\Data\\countries.svg");
adapter.ItemsLoaded += Adapter_ItemsLoaded;
mapControl1.Layers.Add(new VectorItemsLayer {
Data = adapter
});
}
private void Adapter_ItemsLoaded(object sender, ItemsLoadedEventArgs e) {
foreach (MapItem item in e.Items) {
item.Fill = System.Drawing.Color.Gray;
}
}
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim baseUri As Uri = New Uri(System.Reflection.Assembly.GetExecutingAssembly().Location)
Dim adapter As SvgFileDataAdapter = New SvgFileDataAdapter()
adapter.FileUri = New Uri(baseUri, "..\..\Data\countries.svg")
adapter.ItemsLoaded += AddressOf Adapter_ItemsLoaded
mapControl1.Layers.Add(New VectorItemsLayer With {
.Data = adapter
})
End Sub
Private Sub Adapter_ItemsLoaded(ByVal sender As Object, ByVal e As ItemsLoadedEventArgs)
For Each item As MapItem In e.Items
item.Fill = System.Drawing.Color.Gray
Next
End Sub
Use the MapControl.ZoomToFitLayerItems method to zoom a map to fit layer items.
private void Form1_Load(object sender, EventArgs e) {
Uri baseUri = new Uri(System.Reflection.Assembly.GetExecutingAssembly().Location);
SvgFileDataAdapter adapter = new SvgFileDataAdapter();
adapter.FileUri = new Uri(baseUri, "..\\..\\Data\\countries.svg");
VectorItemsLayer layer = new VectorItemsLayer();
layer.Data = adapter;
layer.DataLoaded += Layer_DataLoaded;
mapControl1.Layers.Add(layer);
}
private void Layer_DataLoaded(object sender, DataLoadedEventArgs e) {
mapControl1.ZoomToFitLayerItems();
}
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim baseUri As Uri = New Uri(System.Reflection.Assembly.GetExecutingAssembly().Location)
Dim adapter As SvgFileDataAdapter = New SvgFileDataAdapter()
adapter.FileUri = New Uri(baseUri, "..\..\Data\countries.svg")
Dim layer As VectorItemsLayer = New VectorItemsLayer()
layer.Data = adapter
layer.DataLoaded += AddressOf Layer_DataLoaded
mapControl1.Layers.Add(layer)
End Sub
Private Sub Layer_DataLoaded(ByVal sender As Object, ByVal e As DataLoadedEventArgs)
mapControl1.ZoomToFitLayerItems()
End Sub
You can change shape colors based on shape data. Refer to the following help topic for more information: Colorizers.
You can also group items of the same type. To do this, initialize the MapDataAdapterBase.Clusterer property with a clusterer.
Object MapDisposableObject MapDataAdapterBase CoordinateSystemDataAdapterBase DevExpress.XtraMap.OuterDataAdapterBase FileDataAdapterBase SvgFileDataAdapter
See Also