Provides access to members that serve tiled maps.
Description
This interface is new at ArcGIS 9.3. It supersedes ITiledMapServer.
Members
Name | Description | |
---|---|---|
GetCacheControlInfo | Gets the cache description information for a given map. | |
GetCacheDescriptionInfo | Gets the cache description information for a given map. | |
GetCacheName | Gets the cache name for a given layer within a map. | |
GetLayerTile | Gets a tile for a given tile location from a given layer. | |
GetLayerTileEx | Gets a tile for a given tile location from a given layer. | |
GetMapTile | Gets a tile for a given tile location from a given map. | |
GetMapTileEx | Gets a tile for a given tile location from a given map. | |
GetTileCacheInfo | Gets the cache configuration for a given map. | |
GetTileImageInfo | Gets the cache tile image information for a given map. | |
GetVirtualCacheDirectory | Gets the virtual cache directory for a given layer within a map. | |
HasLayerCache | Indicates if a given layer has a single tile cache. | |
HasSingleFusedMapCache | Indicates if a given map has a single fused map tile cache. | |
IsFixedScaleMap | Indicates if a given map is a fixed scale map. |
ITiledMapServer2.GetCacheControlInfo Method
Gets the cache description information for a given map.
Public Function GetCacheControlInfo ( _
ByVal MapName As String _
) As ICacheControlInfo
public ICacheControlInfo GetCacheControlInfo (
string MapName
);
Remarks
Returns cache control information that allows clients to discover information such as if client caching is allowed.
ITiledMapServer2.GetCacheDescriptionInfo Method
Gets the cache description information for a given map.
Public Function GetCacheDescriptionInfo ( _
ByVal MapName As String _
) As ICacheDescriptionInfo
public ICacheDescriptionInfo GetCacheDescriptionInfo (
string MapName
);
Remarks
GetCacheDescriptionInforeturns information on a cached map service in one call including its cache type, its tiling scheme (ITileCacheInfo), image information (ITileImageInfo) and control information (TileControlInfo). The cache description also includes an array of layer cache infos that can be used to determine if a specific layer has a cache in the case of map services that have a multi layer cache.
ITiledMapServer2.GetLayerTileEx Method
Gets a tile for a given tile location from a given layer.
Public Function GetLayerTileEx ( _
ByVal MapName As String, _
ByVal LayerID As Integer, _
ByVal Level As Integer, _
ByVal Row As Integer, _
ByVal Column As Integer, _
ByVal CacheFormat As Integer _
) As Byte[]
public Byte[] GetLayerTileEx (
string MapName,
int LayerID,
int Level,
int Row,
int Column,
int CacheFormat
);
Remarks
This call gets the specified tile from the specified layer for a map service that has a multi layer cache.
ITiledMapServer2.GetMapTileEx Method
Gets a tile for a given tile location from a given map.
Public Function GetMapTileEx ( _
ByVal MapName As String, _
ByVal Level As Integer, _
ByVal Row As Integer, _
ByVal Column As Integer, _
ByVal CacheFormat As Integer _
) As Byte[]
public Byte[] GetMapTileEx (
string MapName,
int Level,
int Row,
int Column,
int CacheFormat
);
Remarks
This call gets the specified tile from a map service that has a single fused cache.
ITiledMapServer2.GetTileImageInfo Method
Gets the cache tile image information for a given map.
Public Function GetTileImageInfo ( _
ByVal MapName As String _
) As ITileImageInfo
public ITileImageInfo GetTileImageInfo (
string MapName
);
Remarks
GetTileIMageInfo returns information describing the image format for the cached tiles. ITileImageInfo has two main properties Format and Compression quality. Format can have values (PNG8, PNG24, PNG32 and JPEG). If the selected format is JPEG, then the compression quality can have a value from 0 to 100. The value of format must be used in constructing the url to the tile.
Inherited Interfaces
Interfaces | Description |
---|---|
ITiledMapServer | Provides access to members that serve tiled maps. |
Classes that implement ITiledMapServer2
Classes | Description |
---|---|
MapServer | The MapServer component provides programmatic access to the contents of a map document on disk, and creates images of the map contents based on user requests. Designed for use in building map-based web services and web applications. |
Remarks
ITiledMapServer2 allows clients to retrieve information regarding the storage format of images in the cache. This information is needed to construct urls to images in jpeg and other formats. ITiledMapServer2 also has a GetCacheDescriptionInfo method that allows a client to efficiently retrieve information about a tiled map service using fewer round trip calls.
Example 1: Print Cache Service's Description Information
/*
* The function prints all information coming from ICacheDescriptionInfo
* Inputs: a TiledMapServer2 object
* a map (dataframe) name
* Outputs: all information are printed on .NET Console
*/
private void printCacheInfo(ITiledMapServer2 pTiledMap2, string sMapName)
{
ICacheDescriptionInfo pCacheDscInfo = pTiledMap2.GetCacheDescriptionInfo(sMapName);
ICacheControlInfo pCacheCtrlInfo = pCacheDscInfo.CacheControlInfo;
ILayerCacheInfos pLyrCacheInfos = pCacheDscInfo.LayerCacheInfos;
ITileCacheInfo pTileCacheInfo = pCacheDscInfo.TileCacheInfo;
ILODInfos pLODInfos = pTileCacheInfo.LODInfos;
ITileImageInfo2 pTileImgInfo2 = pCacheDscInfo.TileImageInfo as ITileImageInfo2;
Console.WriteLine("CacheType: " + pCacheDscInfo.CacheType.ToString());
Console.WriteLine("CacheControlInfo::");
Console.WriteLine(" ClientCachingAllowed: " + pCacheCtrlInfo.ClientCachingAllowed.ToString());
Console.WriteLine("LayerCacheInfos::");
for (int i = 0; i < pLyrCacheInfos.Count; i++)
Console.WriteLine(" ID: " + pLyrCacheInfos.get_Element(i).ID.ToString() + "; HasCache: " + pLyrCacheInfos.get_Element(i).HasCache.ToString());
Console.WriteLine("TileCacheInfo::");
Console.WriteLine(" DPI: " + pTileCacheInfo.Dpi.ToString());
Console.WriteLine(" Origin: " + pTileCacheInfo.Origin.X.ToString() + "," + pTileCacheInfo.Origin.Y.ToString());
Console.WriteLine(" SRS: " + pTileCacheInfo.SpatialReference.Name);
Console.WriteLine(" TileCols: " + pTileCacheInfo.TileCols.ToString());
Console.WriteLine(" TileRows: " + pTileCacheInfo.TileRows.ToString());
Console.WriteLine(" LODInfos::");
for (int i = 0; i < pLODInfos.Count; i++)
Console.WriteLine(" LevelID: " + pLODInfos.get_Element(i).LevelID + "; Resolution: " + pLODInfos.get_Element(i).Resolution + "; Scale: " + pLODInfos.get_Element(i).Scale);
Console.WriteLine("TileImageInfo::");
Console.WriteLine(" Antialiasing: " + pTileImgInfo2.Antialiasing.ToString());
Console.WriteLine(" CompressionQuality: " + pTileImgInfo2.CompressionQuality.ToString());
Console.WriteLine(" Format: " + pTileImgInfo2.Format);
}
Example 2: Find out map tiles for Single Fused Cached Service that intersects with a map extent at a specific scale
/*
* The funtion computes tile�s URLs that interects the specified map extent
* Inputs: a TiledMapServer
* map (dataframe) name
* sTileHandlerURL: is the endpoint URL for the service can be access from IAGSServerObjectName.URL property
* MapExtent for which tiles will be calculated
* a CacheDescriptionInfo object
* Cached scale
* Outputs: (1) Prints Static URLs for each tile on .NET Console
* (2) Prints URLs for each tile (to be used with TileHandler) on .NET Console
*/
private void getMapTilesURL(ITiledMapServer2 pTileMapServer2, string sMapName, string sTileHandlerURL, IEnvelope pMapExtent, double dScale)
{
ICacheDescriptionInfo pCacheDescriptionInfo = pTileMapServer2.GetCacheDescriptionInfo(sMapName);
string sCachedVirtualDirectory = pTileMapServer2.GetVirtualCacheDirectory(sMapName, -1); //LayerID = -1 for Single Fused Cached
IPoint pTileOrigin = pCacheDescriptionInfo.TileCacheInfo.Origin;
double dblOriginX = pTileOrigin.X;
double dblOriginY = pTileOrigin.Y;
/***********************
* Getting cache resolution & levelID for the specified scale
***********************/
ILODInfos pLODInfos = pCacheDescriptionInfo.TileCacheInfo.LODInfos;
double dLODResolution = -1; int iLevelID = 0;
for (int i = 0; i < pLODInfos.Count; i++)
{
if (pLODInfos.get_Element(i).Scale == dScale)
{
dLODResolution = pLODInfos.get_Element(i).Resolution;
iLevelID = pLODInfos.get_Element(i).LevelID;
break;
}
}
if (dLODResolution == -1)
{
Exception e = new Exception(String.Format("LOD for Scale:{0} not found!",dScale));
throw e;
}
/***********************
* Finding the tile that contains map extent's upper-left & lower-right corner
***********************/
//Calculating Tile's width & height in map unit
double dblTileWidth = pCacheDescriptionInfo.TileCacheInfo.TileCols * dLODResolution;
double dblTileHeight = pCacheDescriptionInfo.TileCacheInfo.TileRows * dLODResolution;
IPoint pPntExtentUL, pPntExtentLR;
pPntExtentUL = pMapExtent.UpperLeft;
pPntExtentLR = pMapExtent.LowerRight;
// Tile's Row & Column for map's upper-left corner
int intULTCOL = (int)Math.Floor((pPntExtentUL.X - dblOriginX) / dblTileWidth);
int intULTROW = (int)Math.Floor((dblOriginY - pPntExtentUL.Y) / dblTileHeight);
// Tile's Row & Column for map's lower-right corner
int intLRTCOL = (int)Math.Floor((pPntExtentLR.X - dblOriginX) / dblTileWidth);
int intLRTROW = (int)Math.Floor((dblOriginY - pPntExtentLR.Y) / dblTileHeight);
/***********************
* Generating URL for each tile that intersects with the map extent
***********************/
string sImgExtension = "";
if (pCacheDescriptionInfo.TileImageInfo.Format == "JPEG")
sImgExtension = "jpg";
else
sImgExtension = "png";
string url;
for (int r = intULTROW; r <= intLRTROW; r++)
{
for (int c = intULTCOL; c <= intLRTCOL; c++)
{
url = string.Format("L{0:D2}/R{1:D8}/C{2:D8}",iLevelID,r,c);
Console.WriteLine(sCachedVirtualDirectory + "/" + url + "." + sImgExtension);
Console.WriteLine(sTileHandlerURL + string.Format("?mapname={0}&layer={1}&level={2}&row={3}&column={4}&format={5}", sMapName, "_alllayers", iLevelID, r, c, sImgExtension));
}
}
}
Example 3: Getting image for a specific tile using GetMapTileEx() function for a Single Fused Cached serivce
/*
* The funtion gets tiles using GetMapTileEx() function and load that on a PictureBox control
* Inputs: a TiledMapServer
* Level Id
* Row Id
* Column Id
* Image format (by using ICacheDescriptionInfo.TileImageInfo.Format property)
*/
private void getMapTileImg(ITiledMapServer2 pTileMapServer2, int l, int r, int c, string format)
{
int f = 0;
switch (format)
{
case "PNG":
f = 0;
break;
case "PNG24":
f = 1;
break;
case "PNG32":
f = 2;
break;
case "JPEG":
f = 3;
break;
default:
f = 0;
break;
}
byte[] imgTile;
try
{
imgTile = pTileMapServer2.GetMapTileEx(m_strDefMapName, l, r, c, f);
}
catch (Exception)
{
MessageBox.Show(String.Format("Problem loading tile for Level:{0}, Row:{1}, Col: {2}", l, r, c), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
MemoryStream ms = new MemoryStream(imgTile);
Bitmap bmp = new Bitmap(ms);
pictureBox1.Image = bmp;
}