Tiles Cache

RadMap allows you to cache the tile images downloaded by the map provider.

The tiles caching is disabled by default. To enable it, set the IsTileCachingEnabled property of the map provider to true. The default cache storage is the file system and the original location should look something like this: C:\Users\<username>\AppData\Local\TelerikMapCache\OpenStreetMapProvider

RadMap providers use the FileSystemCache class to enable the tiles caching. Additionally, there are two more built-in caching implementations - MemoryCache and IsolatedStorageCache - which can be set via the CacheStorage property of the provider.

FileSystemCache

FileSystemCache saves the requested tiles to the file system. This type of cache allows you to define few settings like max size of the storage, an expiration date-time for the tiles and also the file system directory where the tiles are saved.

Example 1: Setting FileSystemCache and changing the default path

<telerik:RadMap> 
    <telerik:RadMap.Provider> 
        <telerik:OpenStreetMapProvider IsTileCachingEnabled="True"> 
            <telerik:OpenStreetMapProvider.CacheStorage> 
                <telerik:FileSystemCache CachePath="C:\temp\OSMCache" /> 
            </telerik:OpenStreetMapProvider.CacheStorage> 
        </telerik:OpenStreetMapProvider> 
    </telerik:RadMap.Provider> 
</telerik:RadMap>    
FileSystemCache is the default storage object that is automatically created when the CacheStorage property of the provider is not assigned. When the file system cache is atuomatically created its CachePath is assigned to the ApplicationData folder on the OS: C:\Users\<username>\AppData\Local\TelerikMapCache\<providername>.

MemoryCache

MemoryCache saves each tile in a byte array stored in memory.

Example 2: Replacing the default FileSystemCache with MemoryCache

<telerik:RadMap> 
    <telerik:RadMap.Provider> 
        <telerik:OpenStreetMapProvider IsTileCachingEnabled="True"> 
            <telerik:OpenStreetMapProvider.CacheStorage> 
                <telerik:MemoryCache /> 
            </telerik:OpenStreetMapProvider.CacheStorage> 
        </telerik:OpenStreetMapProvider> 
    </telerik:RadMap.Provider> 
</telerik:RadMap>    

IsolatedStorageCache

IsolatedStorageCache saves the requested tiles into the isolated storage.

Example 3: Replacing the default FileSystemCache with IsolatedStorageCache

<telerik:RadMap> 
    <telerik:RadMap.Provider> 
        <telerik:OpenStreetMapProvider IsTileCachingEnabled="True"> 
            <telerik:OpenStreetMapProvider.CacheStorage> 
                <telerik:IsolatedStorageCache /> 
            </telerik:OpenStreetMapProvider.CacheStorage> 
        </telerik:OpenStreetMapProvider> 
    </telerik:RadMap.Provider> 
</telerik:RadMap>    

Custom Cache Storage

Besides the built-in cache storages, a custom storage can be created by implementing the ICacheStorage interface. This allows to introduce a saving mechanism different then the originally provided ones. The interface requests to implement Load, LoadAsync and Save methods.

Example 4: Creating custom cache storage

public class CustomCacheStorage : ICacheStorage 
{ 
    public Stream Load(string fileName) 
    { 
        // Load the tile using the 'fileName' as an unique identifier to retrieve the corresponding tile. 
    } 
 
    public void LoadAsync(string fileName, Action<byte[]> callback) 
    { 
        // Load the tile (a byte array) using the 'fileName' as an unique identifier to retrieve the corresponding tile. 
        // Pass it to the callback that will be called to return a tile if it is available. 
 
        // callback(tile); 
    } 
 
    public void Save(string fileName, DateTime expirationDate, byte[] tile) 
    { 
        // Save the tile using: 
        // the 'fileName' as an unique identifier,  
        // the 'expirationDate' as the date until when the tile will be cached and 
        // the 'tile' as the body of the tile image 
    } 
} 

Example 5: Using the custom cache storage

<telerik:RadMap> 
    <telerik:RadMap.Provider> 
        <telerik:OpenStreetMapProvider IsTileCachingEnabled="True"> 
            <telerik:OpenStreetMapProvider.CacheStorage> 
                <local:CustomCacheStorage /> 
            </telerik:OpenStreetMapProvider.CacheStorage> 
        </telerik:OpenStreetMapProvider> 
    </telerik:RadMap.Provider> 
</telerik:RadMap>    

Request Cache Level

The RadMap control uses the built-in .NET caching mechanism for downloading map tiles. The tiled providers expose a RequestCacheLevel property which is used to control the current caching level. The default level is System.Net.Cache.RequestCacheLevel.CacheIfAvailable.

Example 6: Setting the RequestCacheLevel

<telerik:RadMap> 
    <telerik:RadMap.Provider> 
        <telerik:OpenStreetMapProvider RequestCacheLevel="Revalidate" /> 
    </telerik:RadMap.Provider> 
</telerik:RadMap>    

See Also

In this article