MultiScaleImageSource GetTileLayers Explanation

60 views Asked by At

I have been doing reading on MultiScaleImage source, and finding anything useful has proven to be quite difficult, thus I turn to the experts here. The specific knowledge I would like to have pertains to the GetTileLayers method. I know this method is used to get the image tiles. But I have no idea where this method is called from, or where the parameters come from or how I would use it if I subclassed the MultiScaleTileSource Class. Any insight into this method or the MSI model would be amazing but I have 3 main questions:

1. Where should/is the method GetTileLayers called from?
2. How should I change this method if I wanted to draw png's from a non-local URI?
3. Where can I find some reading to help with this?

1

There are 1 answers

3
Clemens On BEST ANSWER

In order to create a custom tile source, you would subclass MultiScaleTileSource and override the GetTileLayers method, as shown in the example below, which defines an image consisting of 1000*1000 tiles of size 256x256 pixels each.

public class MyTileSource : MultiScaleTileSource
{
    public MyTileSource()
        : base(1000 * 256, 1000 * 256, 256, 256, 0)
    {
    }

    protected override void GetTileLayers(
        int tileLevel, int tilePositionX, int tilePositionY,
        IList<object> tileImageLayerSources)
    {
        // create an appropriate URI for tileLevel, tilePositionX and tilePositionY
        // and add it to the tileImageLayerSources collection

        var uri = new Uri(...);
        tileImageLayerSources.Add(uri);
    }
}

Now you would assign an instance of your MyTileSource class to your MultiScaleImage control:

MultiScaleImage msImage = ...
msImage.Source = new MyTileSource();