ThinkGeo.com    |     Documentation    |     Premium Support

Tiles generation for Sl Client

Hello,


I'm not 100% sure, but I've a strange behavior :


When calling a custom Wms server with the MapSuite Silverlight client, it asks for 256x256 tiles. That's wonderfull.


But, server side, when using the code below to read my server cache and send the right 256x256 picture, the server says that it must read 4 tiles (each 256x256) in order to build the 256x256 picture the Sl client asked for. It should only read the right tile and send it, doesn't it ?


That's strange, it looks like the silverlight client does not use the same tiling mechanism as the MapSuiteTileMatrix object does.


 


Here is the code I use server side : 


 var matrix = new MapSuiteTileMatrix(parameter.Scale, 256, 256, GeographyUnit.Meter); var bitmapCache = new FileBitmapTileCache(CacheFolder, "cacheId", TileImageFormat.Png, matrix); var tiles = bitmapCache.GetTiles(parameter.BoundingBox); 


 


and the tiles variable contains 4 tiles.


I don't want to concatenate 4 256x256 tiles every time I ask for a 256x256 tile, but I can't find how to solve this.

Can you please give me some advice ?



Many thanks.

Guillaume.



I don't know if I was clear enough, so here are 2 picture of what I'm talknig about :

 


This picture is was is generated when using FileBitmapTileCache and MapSuiteTileMatrix :



 


And this is the picture asked by the Silverlight client :



 


Therefore, in order to deliver the second picture, the server needs to load 4 pictures ni memory, put them together, and then cut the right area to send. 


Is there a way to direct ask the right area from the Sl client ?


I hope that with thoses pictures my problem will be more clear.

Thanks.

Guillaume.



Guillaume,



Sorry for inconvenience. There are some different about the tiling mechanism between silverlight client and MapSuiteTileMatrix object.

You could try to set the bounding box of Matrix in order to make it compatible with MapSuiteTileMatrix.

The code likes below:


var matrix = new MapSuiteTileMatrix(parameter.Scale, 256, 256, GeographyUnit.Meter, new RectangleShape(-20001365, 20001365, 20001365, -20001365));
var bitmapCache = new FileBitmapTileCache(CacheFolder, "cacheId", TileImageFormat.Png, matrix);
var tiles = bitmapCache.GetTiles(parameter.BoundingBox); 



Thanks,

Khalil



Khalil, 
  
 This solution doesn’t seem to work for every ZoomLevel. 
 When using ZoomLevelSets and MapSuiteTileMatrix, I am not able to get exactly the same Tiles as Silverlight ask for. 
  
 Thi is very problematic, because I really don’t want to put 4 pictures together while I can easily load one tile and send it direct to the client, this would be really less efficient. 
  
 My problem is simple : I would like to cache the 256x256 pictures exactly like the Silverlight client ask. I can do that very simply while writing a custom cache system. But my problem is that I cannot make the MapSuiteCore objects compatible with the SL client, and in my code, every time I use a Matrix or a ZoomLevel, when I make a GetCell() for example, then the BoudingBox is not correct, and doesn’t match the SL Tiles. 
  
 Could you please advise me for a solution ? 
 Many Thanks, 
 Guillaume.

Guillaume, 
  
 Some thing I want to confirm with you. I don’t know what parameter.BoundingBox stands for, is this the tile extent? wheather it comes from Silverlight client or other? If you want to implement your own httphandler and this problem may be occur. And we have fixed this issue for you. 
 So, please check out the latest dll package from helpdesk.thinkgeo.com
 And another thing is that you should set the right matrix extent in order to compatible with silverlight server side cache. 
  
 Thanks, 
 Khalil