com.esri.arcgis.carto
Class DynamicCacheLayerManager

java.lang.Object
  extended by com.esri.arcgis.carto.DynamicCacheLayerManager
All Implemented Interfaces:
IDynamicCacheLayerManager, IDynamicCacheLayerManager2, com.esri.arcgis.interop.RemoteObjRef, Serializable

public class DynamicCacheLayerManager
extends Object
implements com.esri.arcgis.interop.RemoteObjRef, IDynamicCacheLayerManager, IDynamicCacheLayerManager2

Dynamic cache layer management utility class.

Description

This object is new at ArcGIS 9.3.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

See Also:
Serialized Form

Constructor Summary
DynamicCacheLayerManager()
          Constructs a DynamicCacheLayerManager using ArcGIS Engine.
DynamicCacheLayerManager(Object obj)
          Deprecated. As of ArcGIS 9.2, replaced by normal Java casts.
DynamicCacheLayerManager theDynamicCacheLayerManager = (DynamicCacheLayerManager) obj;
 
Method Summary
 void connect(String newFolderPath, String newFolderName)
          Try to connect the given layer to a cache.
 void delete()
          Delete the cache structure and tiles from the disk.
 boolean equals(Object o)
          Compare this object with another
static String getClsid()
          getClsid.
 double getDetailsThreshold()
          The threshold to determine the level of detail to use.
 String getFolderName()
          If cache exists, returns the layername plus guid.
 String getFolderPath()
          The full path of the cache parent directory if the the cache exists.
 String getFormat()
          The name of the tile format which is used by the cache.
 double getMaxCacheScale()
          The maximum scale by which tiles are to be generated.
 int getProgressiveDrawingLevels()
          Number of coarse level data to draw while the current LOD tiles are being processed.
 int getProgressiveFetchingLevels()
          Number of coarse level data to fetch while the current LOD tiles are being processed.
 int hashCode()
          the hashcode for this object
 void init(IMap map, ILayer layer)
          Initialize the cache manager with the given map and layer.
 void invalidate(IEnvelope extent, boolean doubleBuffer)
          Invalidate a certain area of the cache, according to the given extent.
 boolean isAlwaysDrawCoarsestLevel()
          Indicates whether to use the default coarse texture while the requested tile is being processed.
 boolean isCacheable()
          Indicates whether the layer can have a dynamic cache.
 boolean isCached()
          Indicates whether the layer is drawing while in cached mode.
 boolean isConsolidatedGroupLayer()
          Indicates whether the given composite layer cache is consolidated.
 boolean isStrictOnDemandMode()
          Indicates whether to use a coarse grained drawing in case where there is nothing else to render while waiting for the current map scale data to be cooked.
 void setAlwaysDrawCoarsestLevel(boolean alwaysDrawCoarsestLevel)
          Indicates whether to use the default coarse texture while the requested tile is being processed.
 void setCached(boolean cached)
          Indicates whether the layer is drawing while in cached mode.
 void setConsolidatedGroupLayer(boolean consolidated)
          Indicates whether the given composite layer cache is consolidated.
 void setDetailsThreshold(double threshold)
          The threshold to determine the level of detail to use.
 void setFolderPath(String folderPath)
          The full path of the cache parent directory if the the cache exists.
 void setFormat(String format)
          The name of the tile format which is used by the cache.
 void setMaxCacheScale(double maxScale)
          The maximum scale by which tiles are to be generated.
 void setProgressiveDrawingLevels(int numOfProgressiveLevels)
          Number of coarse level data to draw while the current LOD tiles are being processed.
 void setProgressiveFetchingLevels(int numOfProgressiveLevels)
          Number of coarse level data to fetch while the current LOD tiles are being processed.
 void setStrictOnDemandMode(boolean strictOnDemandMode)
          Indicates whether to use a coarse grained drawing in case where there is nothing else to render while waiting for the current map scale data to be cooked.
 void update(IEnvelope extent, double fromMapScale, double targetMapScale, int updateMode)
          Update the cache associated with the layer according to the given extent, between the from-scale to the target-scale and according to the update-mode.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.esri.arcgis.interop.RemoteObjRef
getJintegraDispatch, release
 

Constructor Detail

DynamicCacheLayerManager

public DynamicCacheLayerManager()
                         throws IOException,
                                UnknownHostException
Constructs a DynamicCacheLayerManager using ArcGIS Engine.

Throws:
IOException - if there are interop problems
UnknownHostException - if there are interop problems

DynamicCacheLayerManager

public DynamicCacheLayerManager(Object obj)
                         throws IOException
Deprecated. As of ArcGIS 9.2, replaced by normal Java casts.
DynamicCacheLayerManager theDynamicCacheLayerManager = (DynamicCacheLayerManager) obj;

Construct a DynamicCacheLayerManager using a reference to such an object returned from ArcGIS Engine or Server. This is semantically equivalent to casting obj to DynamicCacheLayerManager.

Parameters:
obj - an object returned from ArcGIS Engine or Server
Throws:
IOException - if there are interop problems
Method Detail

getClsid

public static String getClsid()
getClsid.


equals

public boolean equals(Object o)
Compare this object with another

Overrides:
equals in class Object

hashCode

public int hashCode()
the hashcode for this object

Overrides:
hashCode in class Object

init

public void init(IMap map,
                 ILayer layer)
          throws IOException,
                 AutomationException
Initialize the cache manager with the given map and layer.

Remarks

Calling any of the DynamicCacheLayerManager methods or properties before calling Init will result in an exception!

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
init in interface IDynamicCacheLayerManager
Parameters:
map - A reference to a com.esri.arcgis.carto.IMap (in)
layer - A reference to a com.esri.arcgis.carto.ILayer (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getFolderName

public String getFolderName()
                     throws IOException,
                            AutomationException
If cache exists, returns the layername plus guid. If cache does not exists, returns nothing.

Remarks

The folder name is composed of a clean layer name (layer name without special characters) plus a global unique identifier (GUID).

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getFolderName in interface IDynamicCacheLayerManager
Returns:
The cacheFolderName
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getFolderPath

public String getFolderPath()
                     throws IOException,
                            AutomationException
The full path of the cache parent directory if the the cache exists.

Remarks

Returns the full Path of the Parent Folder of the cache that is associated with the layer.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getFolderPath in interface IDynamicCacheLayerManager
Returns:
The folderPath
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setFolderPath

public void setFolderPath(String folderPath)
                   throws IOException,
                          AutomationException
The full path of the cache parent directory if the the cache exists.

Remarks

The Dynamic Cache Layer Manager will first try to connect to the cache defined by the new Folder Path and the Layer’s cache name. If it can not connect, a new cache will be generated.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setFolderPath in interface IDynamicCacheLayerManager
Parameters:
folderPath - The folderPath (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isCacheable

public boolean isCacheable()
                    throws IOException,
                           AutomationException
Indicates whether the layer can have a dynamic cache.

Remarks

Since consolidated group layers use caches, when any layer (including a non cacheable layer) is under a consolidated group layer, a cache for that layer will get generated, as part of the group layer’s cache.

Some type of layers, e.g. Raster layers, do not use a proprietary dynamic display cache, and therefore can not be cached.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
isCacheable in interface IDynamicCacheLayerManager
Returns:
The cacheable
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

delete

public void delete()
            throws IOException,
                   AutomationException
Delete the cache structure and tiles from the disk.

Remarks

If the dynamic display is active, the cache will be recreated once the delete method is called.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
delete in interface IDynamicCacheLayerManager
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

invalidate

public void invalidate(IEnvelope extent,
                       boolean doubleBuffer)
                throws IOException,
                       AutomationException
Invalidate a certain area of the cache, according to the given extent. If the input extent is null, invalidates the entire cache. Duoble-buffer does not show changes until new tiles are available.

Remarks

Passing a null extent will result in update of the cache for the entire layer (determined by the layer area of interest).

When double-buffer is false, the invalidated tiles will disappear from the display immediately.

When double-buffer is true, the invalidated tiles will keep being rendered, until the new tiles are ready, or until a defined max time (time out), which ever comes first.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
invalidate in interface IDynamicCacheLayerManager
Parameters:
extent - A reference to a com.esri.arcgis.geometry.IEnvelope (in)
doubleBuffer - The doubleBuffer (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getFormat

public String getFormat()
                 throws IOException,
                        AutomationException
The name of the tile format which is used by the cache.

Remarks

There are two compression formats which are supported by the dynamic display – PNG and JPEG. In both cases, the 32 bit image format is used (although JPEG only supports 24 bits out-of-the-box, ESRI has extended the format in order to support transparency).

When setting the input format it is best to explicitly specify JPEG32 or PNG32.

By their nature, the two compression formats are different from each other. PNG format is at best when it is compressing discrete colors and tends to bloat when a continuous image is being used (such as aerial photo). On the other hand, JPEG compression is usually better in terms of compression (takes less disk space) and is much better with continuous images; however when it comes to discrete colors, the result may be a bit twisted and can look blurry.

The default compression format is PNG.

At runtime, when the dynamic display is active, changing the compression format will result in regeneration of the cache. If the dynamic display is not active (or hasn’t been activated), the new format information will be written to the layer information and as soon as the dynamic display is activated, the existing cache will be rebuild.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getFormat in interface IDynamicCacheLayerManager
Returns:
The format
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setFormat

public void setFormat(String format)
               throws IOException,
                      AutomationException
The name of the tile format which is used by the cache.

Remarks

There are two compression formats which are supported by the dynamic display – PNG and JPEG. In both cases, the 32 bit image format is used (although JPEG only supports 24 bits out-of-the-box, ESRI has extended the format in order to support transparency).

When setting the input format it is best to explicitly specify JPEG32 or PNG32.

By their nature, the two compression formats are different from each other. PNG format is at best when it is compressing discrete colors and tends to bloat when a continuous image is being used (such as aerial photo). On the other hand, JPEG compression is usually better in terms of compression (takes less disk space) and is much better with continuous images; however when it comes to discrete colors, the result may be a bit twisted and can look blurry.

The default compression format is PNG.

At runtime, when the dynamic display is active, changing the compression format will result in regeneration of the cache. If the dynamic display is not active (or hasn’t been activated), the new format information will be written to the layer information and as soon as the dynamic display is activated, the existing cache will be rebuild.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setFormat in interface IDynamicCacheLayerManager
Parameters:
format - The format (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

connect

public void connect(String newFolderPath,
                    String newFolderName)
             throws IOException,
                    AutomationException
Try to connect the given layer to a cache.

Remarks

Please note that in order to connect to an existing cache, you must know the folder path which contains the cache information you will connect to. The folder-name is composed from the layer name together with a global unique identifier assigned by the dynamic display when it got generated.

To get the name of an existing cache you can use property IDynamicCacheLayerManager.FolderName.

In addition to verify that the destination cache exists, the method connect checks the following before actually connecting to the cache:

  1. The cache structure matches the input layer.
  2. Spatial reference of the target cache matches the one of the map.
  3. The compression format of the cache matches the one set for the layer.
  4. Should the input layer have a reference scale, that matches the one set to the cache.
  5. Renderers and labels are identical.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
connect in interface IDynamicCacheLayerManager
Parameters:
newFolderPath - The newFolderPath (in)
newFolderName - The newFolderName (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

update

public void update(IEnvelope extent,
                   double fromMapScale,
                   double targetMapScale,
                   int updateMode)
            throws IOException,
                   AutomationException
Update the cache associated with the layer according to the given extent, between the from-scale to the target-scale and according to the update-mode.

Remarks

Passing a null extent will result in update of the cache for the entire layer extent, according to the layer’s area of interest.

Normally, the values for both fromMapScale and targetMapScale are set to greater than zero. In case of extreme values such as zero or less, the following behaviors are expected:

The updateMode is to replace missing tiles, overwrite outdated tiles, or delete tiles for a given layer within a given extent and scale reange. There are three modes of operation:

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
update in interface IDynamicCacheLayerManager
Parameters:
extent - A reference to a com.esri.arcgis.geometry.IEnvelope (in)
fromMapScale - The fromMapScale (in)
targetMapScale - The targetMapScale (in)
updateMode - A com.esri.arcgis.carto.esriMapCacheUpdateMode constant (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isConsolidatedGroupLayer

public boolean isConsolidatedGroupLayer()
                                 throws IOException,
                                        AutomationException
Indicates whether the given composite layer cache is consolidated.

Remarks

By default, the dynamic display creates a separate cache for each individual layer in the map. At runtime, each cache is translated into textures when it comes to displaying the cache in dynamic mode. This means that when displayed, each layer is rendered as a sequence of adjacent textures in the form of seamless tiles. Each of these textures eventually takes a certain amount of memory on the graphics card.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
isConsolidatedGroupLayer in interface IDynamicCacheLayerManager
Returns:
The consolidated
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setConsolidatedGroupLayer

public void setConsolidatedGroupLayer(boolean consolidated)
                               throws IOException,
                                      AutomationException
Indicates whether the given composite layer cache is consolidated.

Remarks

By default, the dynamic display creates a separate cache for each individual layer in the map. At runtime, each cache is translated into textures when it comes to displaying the cache in dynamic mode. This means that when displayed, each layer is rendered as a sequence of adjacent textures in the form of seamless tiles. Each of these textures eventually takes a certain amount of memory on the graphics card.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setConsolidatedGroupLayer in interface IDynamicCacheLayerManager
Parameters:
consolidated - The consolidated (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isStrictOnDemandMode

public boolean isStrictOnDemandMode()
                             throws IOException,
                                    AutomationException
Indicates whether to use a coarse grained drawing in case where there is nothing else to render while waiting for the current map scale data to be cooked.

Remarks

When set to true, it restricts the dynamic display from setting requests for tiles o tiles other than the tiles of the current calculated level of detail (with the exception of the coarse level tile when it is required).

In order to give the user a better visual experience, the dynamic display can use several levels of coarse textures to be rendered while it waits for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels, where ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture. The ProgressiveFetchingLevels property sets the number of level of details for which the dynamic display will set requests to actually fetch data on the background thread, incase this data was not found in memory. Setting StrictOnDemandMode forces the dynamic display to set tiles requests only for the current map scale and logically sets ProgressiveFetchingLevels to zero.

By default, all layers are set to work using StrictOnDemandMode equal to true, to give the best total drawing speed. When setting this property to false, especially with raster layers, the user experience is much better, although the total drawing time is about 30% longer.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
isStrictOnDemandMode in interface IDynamicCacheLayerManager
Returns:
The strictOnDemandMode
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setStrictOnDemandMode

public void setStrictOnDemandMode(boolean strictOnDemandMode)
                           throws IOException,
                                  AutomationException
Indicates whether to use a coarse grained drawing in case where there is nothing else to render while waiting for the current map scale data to be cooked.

Remarks

When set to true, it restricts the dynamic display from setting requests for tiles o tiles other than the tiles of the current calculated level of detail (with the exception of the coarse level tile when it is required).

In order to give the user a better visual experience, the dynamic display can use several levels of coarse textures to be rendered while it waits for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels, where ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture. The ProgressiveFetchingLevels property sets the number of level of details for which the dynamic display will set requests to actually fetch data on the background thread, incase this data was not found in memory. Setting StrictOnDemandMode forces the dynamic display to set tiles requests only for the current map scale and logically sets ProgressiveFetchingLevels to zero.

By default, all layers are set to work using StrictOnDemandMode equal to true, to give the best total drawing speed. When setting this property to false, especially with raster layers, the user experience is much better, although the total drawing time is about 30% longer.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setStrictOnDemandMode in interface IDynamicCacheLayerManager
Parameters:
strictOnDemandMode - The strictOnDemandMode (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getMaxCacheScale

public double getMaxCacheScale()
                        throws IOException,
                               AutomationException
The maximum scale by which tiles are to be generated.

Remarks

This property is very useful with raster layers that have a specified resolution (cell-size) and it is clear that beyond a certain map scale, there is no point in generating additional tiles.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getMaxCacheScale in interface IDynamicCacheLayerManager
Returns:
The maxScale
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setMaxCacheScale

public void setMaxCacheScale(double maxScale)
                      throws IOException,
                             AutomationException
The maximum scale by which tiles are to be generated.

Remarks

This property is very useful with raster layers that have a specified resolution (cell-size) and it is clear that beyond a certain map scale, there is no point in generating additional tiles.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setMaxCacheScale in interface IDynamicCacheLayerManager
Parameters:
maxScale - The maxScale (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getDetailsThreshold

public double getDetailsThreshold()
                           throws IOException,
                                  AutomationException
The threshold to determine the level of detail to use. Values range from 0 to 100, where 100 means always choose coarse data.

Remarks

The cache for non dynamic layers is composed of discrete levels of details. Each level of detail corresponds to a specific map scale. In order to draw the cached tiles in the map, the dynamic display has to choose an appropriate level of detail and resample it further in order to scale it to the current map scale (which might be slightly different from the one that corresponds to the given level of detail). For that reason, most given map scales will fall within two levels of detail of the cache. Choosing the coarsest level of detail (the one whose scale is smaller than the map scale) may result in a bit blurry display because of the stretching effect and on the other hand, choosing the more detailed level of detail may lead to too many tiles that are needed to be drawn in the display and eventually degrades performance. For that reason, the dynamic display is calculating a ‘normalized distance’ which is the normalized value of the scale difference between the maps’ current scale and the coarse level of detail scale divided by the difference between the coarse level of detail scale and the more detailed level of detail scale.

The threshold determines the normalized value by which the coarse level of detail will be preferred over the more detailed one. By default the threshold value is set to 0.85 which means that as long as the scale difference between the map and the coarse LOD is below 85% of the difference between the scale of the coarse LOD and the finer LOD, the coarse LOD will be chosen over the more detailed one.

In order to favor them more detailed LOD, you should decrease the threshold.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getDetailsThreshold in interface IDynamicCacheLayerManager
Returns:
The threshold
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setDetailsThreshold

public void setDetailsThreshold(double threshold)
                         throws IOException,
                                AutomationException
The threshold to determine the level of detail to use. Values range from 0 to 100, where 100 means always choose coarse data.

Remarks

The cache for non dynamic layers is composed of discrete levels of details. Each level of detail corresponds to a specific map scale. In order to draw the cached tiles in the map, the dynamic display has to choose an appropriate level of detail and resample it further in order to scale it to the current map scale (which might be slightly different from the one that corresponds to the given level of detail). For that reason, most given map scales will fall within two levels of detail of the cache. Choosing the coarsest level of detail (the one whose scale is smaller than the map scale) may result in a bit blurry display because of the stretching effect and on the other hand, choosing the more detailed level of detail may lead to too many tiles that are needed to be drawn in the display and eventually degrades performance. For that reason, the dynamic display is calculating a ‘normalized distance’ which is the normalized value of the scale difference between the maps’ current scale and the coarse level of detail scale divided by the difference between the coarse level of detail scale and the more detailed level of detail scale.

The threshold determines the normalized value by which the coarse level of detail will be preferred over the more detailed one. By default the threshold value is set to 0.85 which means that as long as the scale difference between the map and the coarse LOD is below 85% of the difference between the scale of the coarse LOD and the finer LOD, the coarse LOD will be chosen over the more detailed one.

In order to favor them more detailed LOD, you should decrease the threshold.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setDetailsThreshold in interface IDynamicCacheLayerManager
Parameters:
threshold - The threshold (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getProgressiveDrawingLevels

public int getProgressiveDrawingLevels()
                                throws IOException,
                                       AutomationException
Number of coarse level data to draw while the current LOD tiles are being processed.

Remarks

In order to give the user a better visual experience, the dynamic display can use several levels of coarse textures to be rendered while waiting for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels. ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture.

In the case where the number set to ProgressiveDrawingLevels is smaller than the value set to ProgressiveFetchingLevels, it would limit ProgressiveFetchingLevels to the number set to ProgressiveDrawingLevels.

By default, for layers that use a default texture (AlwaysDrawCoarsestLevel is set to true), the value for ProgressiveDrawingLevels is set to 31, meaning that in the case where there is a missing texture, the dynamic display will search for a coarse texture starting from the level of detail above the calculated one and will continue searching all the way to the level of detail that defines the default texture for the layer.

For layers that do not use a default texture (point and line feature classes), the ProgressiveDrawingLevels value is set to one, meaning that in case where the texture for the requested level of detail is not ready, it will only search up one level in memory in order to find a coarse texture.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getProgressiveDrawingLevels in interface IDynamicCacheLayerManager
Returns:
The numOfProgressiveLevels
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setProgressiveDrawingLevels

public void setProgressiveDrawingLevels(int numOfProgressiveLevels)
                                 throws IOException,
                                        AutomationException
Number of coarse level data to draw while the current LOD tiles are being processed.

Remarks

In order to give the user a better visual experience, the dynamic display can use several levels of coarse textures to be rendered while waiting for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels . ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture.

In the case where the number set to ProgressiveDrawingLevels is smaller than the value set to ProgressiveFetchingLevels, it would limit ProgressiveFetchingLevels to the number set to ProgressiveDrawingLevels.

By default, for layers that use a default texture (AlwaysDrawCoarsestLevel is set to true), the value for ProgressiveDrawingLevels is set to 31, meaning that in the case where there is a missing texture, the dynamic display will search for a coarse texture starting from the level of detail above the calculated one and will continue searching all the way to the level of detail that defines the default texture for the layer.

For layers that do not use a default texture (point and line feature classes), the ProgressiveDrawingLevels value is set to one, meaning that in case where the texture for the requested level of detail is not ready, it will only search up one level in memory in order to find a coarse texture.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setProgressiveDrawingLevels in interface IDynamicCacheLayerManager
Parameters:
numOfProgressiveLevels - The numOfProgressiveLevels (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getProgressiveFetchingLevels

public int getProgressiveFetchingLevels()
                                 throws IOException,
                                        AutomationException
Number of coarse level data to fetch while the current LOD tiles are being processed.

Remarks

In order to give the user a better visual experience, the dynamic display can be rendered with several levels of coarse textures to be rendered while waiting for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels, where ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture. ProgressiveFetchingLevels sets the number of level of details for which the dynamic display will set requests to actually fetch data on the background thread incase this data is not found in memory.

Setting the StrictOnDemandMode property to true, forces the dynamic display to set tiles requests only for the current map scale and logically sets ProgressiveFetchingLevels to zero.

By default, all layers are set to work using StrictOnDemandMode = true, to give the best total drawing speed.

When this property is set to false, especially with raster layers, the user experience is much better, although the total drawing time is about 30% longer. Being overridden by ProgressiveDrawingLevels and StrictOnDemandMode.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
getProgressiveFetchingLevels in interface IDynamicCacheLayerManager
Returns:
The numOfProgressiveLevels
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setProgressiveFetchingLevels

public void setProgressiveFetchingLevels(int numOfProgressiveLevels)
                                  throws IOException,
                                         AutomationException
Number of coarse level data to fetch while the current LOD tiles are being processed.

Remarks

In order to give the user a better visual experience, the dynamic display can be rendered with several levels of coarse textures to be rendered while waiting for the background thread to finish processing the data for the current map scale (and therefore the appropriate level of detail). The user can control the number of coarse textures by setting properties ProgressiveDrawingLevels and ProgressiveFetchingLevels, where ProgressiveDrawingLevels sets the number of level of details the dynamic display will search in memory to get a coarse texture. ProgressiveFetchingLevels sets the number of level of details for which the dynamic display will set requests to actually fetch data on the background thread incase this data is not found in memory.

Setting the StrictOnDemandMode property to true, forces the dynamic display to set tiles requests only for the current map scale and logically sets ProgressiveFetchingLevels to zero.

By default, all layers are set to work using StrictOnDemandMode = true, to give the best total drawing speed.

When this property is set to false, especially with raster layers, the user experience is much better, although the total drawing time is about 30% longer. Being overridden by ProgressiveDrawingLevels and StrictOnDemandMode.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setProgressiveFetchingLevels in interface IDynamicCacheLayerManager
Parameters:
numOfProgressiveLevels - The numOfProgressiveLevels (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isAlwaysDrawCoarsestLevel

public boolean isAlwaysDrawCoarsestLevel()
                                  throws IOException,
                                         AutomationException
Indicates whether to use the default coarse texture while the requested tile is being processed.

Remarks

AlwaysDrawCoarsestLevel determines whether to use a coarse texture in case that there is no other data to draw. This might happen when a layer is required to draw tile information which pertains to a certain map scale. In such case, if by the time that the dynamic display is supposed to draw that tile, its texture is not yet ready, the dynamic display will use a default texture instead. As soon as the requested texture for the given tile is ready, it will be used instead of the default texture.

The default texture is calculated according to the layers’ area of interest (it covers the entire layer and therefore can be used anywhere there’s a missing information).

By default, this property is set according to the type of the layer. Any layer except point and polyline feature layers (including CAD, SDC and coverage) sets this property to true.

For some types of layer it is difficult to determine the appropriate default value, since it might not contain point or line vector data. For an instance, internet layers such as ArcGIS Server or ArcIMS can actually serve images of vector data (such as highways, railways, rivers etc.). Since there is no way to figure the type of the information served by these layers beforehand, the default is to set AlwaysDrawCoarsestLevel to true. This can lead to less effective drawing effects. So by changing AlwaysDrawCoarsestLevel to false you can modify the default behavior.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
isAlwaysDrawCoarsestLevel in interface IDynamicCacheLayerManager
Returns:
The alwaysDrawCoarsestLevel
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setAlwaysDrawCoarsestLevel

public void setAlwaysDrawCoarsestLevel(boolean alwaysDrawCoarsestLevel)
                                throws IOException,
                                       AutomationException
Indicates whether to use the default coarse texture while the requested tile is being processed.

Remarks

AlwaysDrawCoarsestLevel determines whether to use a coarse texture in case that there is no other data to draw. This might happen when a layer is required to draw tile information which pertains to a certain map scale. In such case, if by the time that the dynamic display is supposed to draw that tile, its texture is not yet ready, the dynamic display will use a default texture instead. As soon as the requested texture for the given tile is ready, it will be used instead of the default texture.

The default texture is calculated according to the layers’ area of interest (it covers the entire layer and therefore can be used anywhere there’s a missing information).

By default, this property is set according to the type of the layer. Any layer except point and polyline feature layers (including CAD, SDC and coverage) sets this property to true.

For some types of layer it is difficult to determine the appropriate default value, since it might not contain point or line vector data. For an instance, internet layers such as ArcGIS Server or ArcIMS can actually serve images of vector data (such as highways, railways, rivers etc.). Since there is no way to figure the type of the information served by these layers beforehand, the default is to set AlwaysDrawCoarsestLevel to true. This can lead to less effective drawing effects. So by changing AlwaysDrawCoarsestLevel to false you can modify the default behavior.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setAlwaysDrawCoarsestLevel in interface IDynamicCacheLayerManager
Parameters:
alwaysDrawCoarsestLevel - The alwaysDrawCoarsestLevel (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isCached

public boolean isCached()
                 throws IOException,
                        AutomationException
Indicates whether the layer is drawing while in cached mode.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
isCached in interface IDynamicCacheLayerManager2
Returns:
The cached
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setCached

public void setCached(boolean cached)
               throws IOException,
                      AutomationException
Indicates whether the layer is drawing while in cached mode.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Specified by:
setCached in interface IDynamicCacheLayerManager2
Parameters:
cached - The cached (in)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.