Back to Devexpress

SvgFileDataAdapter Class

windowsforms-devexpress-dot-xtramap-8e2f05da.md

latest7.4 KB
Original Source

SvgFileDataAdapter Class

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

Declaration

csharp
public class SvgFileDataAdapter :
    FileDataAdapterBase,
    ISvgPointConverterFactory
vb
Public Class SvgFileDataAdapter
    Inherits FileDataAdapterBase
    Implements ISvgPointConverterFactory

Remarks

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>

|

MapEllipse

| |

<ellipse>

|

MapEllipse

| |

<line>

|

MapLine

| |

<path>
(M,m,L,l,H,h,V,v,Z,z commands are supported)

|

MapPath

| |

<polyline>

|

MapPolyline

| |

<polygon>

|

MapPolygon

| |

<rect>

|

MapRectangle

|

Note

The Map Control does not support the style element and style tag in the SVG markup.

Load SVG Data

Follow the steps below to load data from an SVG file:

csharp
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")
        }
    });
}
vb
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

View Example

Access and Customize Map Items

When vector items are loaded, the FileDataAdapterBase.ItemsLoaded event occurs. Use the e.Items property to access map items.

csharp
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;
    }
}
vb
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.

csharp
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();
}
vb
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.

Implements

IMapDataAdapter

Inheritance

Object MapDisposableObject MapDataAdapterBase CoordinateSystemDataAdapterBase DevExpress.XtraMap.OuterDataAdapterBase FileDataAdapterBase SvgFileDataAdapter

See Also

SvgFileDataAdapter Members

Vector Items

DevExpress.XtraMap Namespace