Back to Devexpress

Image Tile Providers

windowsforms-115774-controls-and-libraries-map-control-map-image-data-image-tile-providers.md

latest14.7 KB
Original Source

Image Tile Providers

  • Jul 08, 2025
  • 7 minutes to read

A MapControl uses image tile data providers to provide map image layers with data from imagery services. Specify the ImageLayer.DataProvider property to add tiles from imagery services to the map.

The Map control supports the following tile providers:

Create a data provider to use another online imagery service or load image tiles from an intranet server.

You can also generate tiles from an image tile source at runtime.

Azure Maps Data Provider

This data provider loads image tiles from Microsoft Azure Maps.

Note

You should register an Azure Maps key to use the Azure Maps services. Refer to the following help topic for additional information: Create an Azure Maps account.

Use the following API members to connect the Map Control to the Azure Maps service:

MemberDescription
ImageLayerDisplays map images obtained from map image data providers.
ImageLayer.DataProviderGets or sets the provider used to obtain images from an external source.
AzureMapDataProviderLoads map images from the Azure Maps data provider.
AzureMapDataProvider.AzureKeySpecifies the key you receive when you Create an Azure Maps account.

You can also specify the following settings for a map layer:

MemberDescription
AzureMapDataProvider.CultureNameGets or sets the Culture name used to obtain data from Azure GIS services.
AzureMapDataProvider.LocalizedMapViewSpecifies the map view for a certain country/region.
AzureMapDataProvider.TilesetSpecifies the tileset that the provider loads from the service.
AzureMapDataProvider.ProjectionGets a projection used by the Azure Maps data provider.

The following example connects to Azure Maps and specifies map layers:

csharp
using DevExpress.XtraMap;
// ...
const string azureKey = "your key";
// ...
private void Form1_Load(object sender, EventArgs e) {
    // Create a map control.
    MapControl map = new MapControl();
    // Specify the map position on the form.           
    map.Dock = DockStyle.Fill;
    // Create a layer.
    ImageLayer layer1 = new ImageLayer();
    layer1.DataProvider = new AzureMapDataProvider() {
        AzureKey = azureKey,
        // Set Imagery tileset to display a satellite or aerial imagery on a layer.
        Tileset = AzureTileset.Imagery,
    };
    // Create a layer.
    ImageLayer layer2 = new ImageLayer();
    layer2.DataProvider = new AzureMapDataProvider(){
        AzureKey = azureKey,
        // Set BaseLabelsRoad tileset to display boundaries and label data in the Azure Map style on a layer.
        Tileset = AzureTileset.BaseLabelsRoad,
    };

    // Specify the map zoom level and center point. 
    map.ZoomLevel = 3;
    map.CenterPoint = new GeoPoint(40, -100);
    // Add the created layers to the collection.
    map.Layers.AddRange(new LayerBase[] {
        layer1, layer2});
    // Add the map control to the window.
    this.Controls.Add(map);
}
vb
Imports DevExpress.XtraMap
'...
Private Const azureKey As String = "your key"
' ...
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
    ' Create a map control.
    Dim map As New MapControl()
    ' Specify the map position on the form.           
    map.Dock = DockStyle.Fill
    ' Create a layer.
    Dim layer1 As New ImageLayer()
    layer1.DataProvider = New AzureMapDataProvider() With {
        .AzureKey = azureKey,
        .Tileset = AzureTileset.Imagery
    }
    ' Create a layer.
    Dim layer2 As New ImageLayer()
    layer2.DataProvider = New AzureMapDataProvider() With {
        .AzureKey = azureKey,
        .Tileset = AzureTileset.BaseLabelsRoad
    }

    ' Specify the map zoom level and center point. 
    map.ZoomLevel = 3
    map.CenterPoint = New GeoPoint(40, -100)
    ' Add the created layers to the collection.
    map.Layers.AddRange(New LayerBase() { layer1, layer2})
    ' Add the map control to the window.
    Me.Controls.Add(map)
End Sub

The Map Control also supports the following Azure Maps data providers:

OpenStreetMap Data Provider

This data provider loads image tiles from the the OpenStreetMap service.

Note

Review the Copyright and License and Tile usage policy pages before using map images in the OpenStreetMap format.

You should provide the UserAgent parameter with a valid value to identify your application.

Use the OpenStreetMapDataProvider class to work with OpenStreetMap:

csharp
private void OnFormLoad(object sender, EventArgs e) {
    ImageLayer imageLayer = mapControl1.Layers[0] as ImageLayer;
    OpenStreetMapDataProvider osmDataProvider = new OpenStreetMapDataProvider();
    osmDataProvider.WebRequest += OnProviderWebRequest;
    osmDataProvider.TileUriTemplate = "http://{subdomain}.tile.MyCustomOSMProvider.org/{tileLevel}/{tileX}/{tileY}.png";
    imageLayer.DataProvider = osmDataProvider;            
}
private void OnProviderWebRequest(object sender, MapWebRequestEventArgs e) {
    e.UserAgent = "DevExpress OpenStreetMapProvider example";
}
vb
Private Sub OnFormLoad(ByVal sender As Object, ByVal e As EventArgs)
    Dim imageLayer As ImageLayer = TryCast(mapControl1.Layers(0), ImageLayer)
    Dim osmDataProvider As OpenStreetMapDataProvider = New OpenStreetMapDataProvider()
    osmDataProvider.WebRequest += AddressOf OnProviderWebRequest
    osmDataProvider.TileUriTemplate = "http://{subdomain}.tile.MyCustomOSMProvider.org/{tileLevel}/{tileX}/{tileY}.png"
    imageLayer.DataProvider = osmDataProvider
End Sub

Private Sub OnProviderWebRequest(ByVal sender As Object, ByVal e As MapWebRequestEventArgs)
    e.UserAgent = "DevExpress OpenStreetMapProvider example"
End Sub

Use the following API members to connect the Map Control to the OpenStreetMap service:

MemberDescription
ImageLayerDisplays map images obtained from map image data providers.
ImageLayer.DataProviderGets or sets the provider used to obtain images from an external source.
OpenStreetMapDataProviderThe class that loads map images from a web resource that provides data in the OpenStreetMap format.
MapImageDataProviderBase.WebRequestOccurs when a Map control sends a request to an external web service.
OpenStreetMapDataProvider.TileUriTemplateGets or sets a pattern to obtain image tiles from the OpenStreetMap provider.
MapWebRequestEventArgs.UserAgentGets or sets the value of the user-agent HTTP header.

The Map Control also supports the following OpenStreetMap data providers:

Generate Tiles at Runtime

Follow the steps below to populate a map with custom tiles created at runtime.

csharp
using DevExpress.XtraMap;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace InMemoryTileProvider {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
            ImageTileDataProvider tileDataProvider = new ImageTileDataProvider();
            tileDataProvider.TileSource = new SimpleTileGenerator();
            this.imageLayer1.DataProvider = tileDataProvider;
        }
        public class SimpleTileGenerator : IImageTileSource {
            readonly Font font = new Font("Arial", 10);
            Random rnd = new Random();
            public bool CanDisposeSourceImage => true;
            public string Name => nameof(SimpleTileGenerator);
            public Image GetImage(int x, int y, int level, Size size) {
                Bitmap bitmap = new Bitmap(size.Width, size.Height);
                using (Graphics gr = Graphics.FromImage(bitmap)) {
                    gr.Clear(Color.FromArgb(128, rnd.Next(255),
                            rnd.Next(255), rnd.Next(255)));
                    gr.DrawString(string.Format("{0} {1} {2}", x, y, level),
                           font, Brushes.Black, new PointF(5, 5));
                }
                return bitmap;
            }
        }
    }
}
vb
Imports DevExpress.XtraMap
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms

Namespace InMemoryTileProvider
    Partial Public Class Form1
        Inherits Form

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
            Dim tileDataProvider As New ImageTileDataProvider()
            tileDataProvider.TileSource = New SimpleTileGenerator()
            Me.imageLayer1.DataProvider = tileDataProvider
        End Sub

        Public Class SimpleTileGenerator
            Implements IImageTileSource

            Private ReadOnly font As New Font("Arial", 10)
            Private rnd As New Random()
            Public ReadOnly Property CanDisposeSourceImage() As Boolean
                Get
                    Return True
                End Get
            End Property
            Public ReadOnly Property Name() As String
                Get
                    Return NameOf(SimpleTileGenerator)
                End Get
            End Property

            Public Function GetImage(ByVal x As Integer, ByVal y As Integer, ByVal level As Integer, ByVal size As Size) As Image
                Dim bitmap As New Bitmap(size.Width, size.Height)
                Using gr As Graphics = Graphics.FromImage(bitmap)
                    gr.Clear(Color.FromArgb(128, rnd.Next(255), rnd.Next(255), rnd.Next(255)))
                    gr.DrawString(String.Format("{0} {1} {2}", x, y, level), font, Brushes.Black, New PointF(5, 5))
                End Using
                Return bitmap
            End Function
        End Class
    End Class
End Namespace

The Map Control stores the loaded tiles in cache. To customize cache parameters, use the MapTileDataProviderBase.CacheOptions property.

Custom Image Data Provider

To develop a data provider, create a MapDataProviderBase class descendant and define a custom image tile source for it. This image tile source should be derived from MapTileSourceBase and provide a way to retrieve image tiles.

Example

See Also

Web Map Service Provider

Georeferenced Image

How to: Load Image Tiles from Bing Maps

How to: Load Image Tiles from OpenStreetMap

How to: Load Image Tiles from a Local Directory