|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface IDynamicCacheLayerManager
Provides access to dynamic layers cache management.
This interface is new at ArcGIS 9.3.
Using this cache management interface, one can pre-generate caches, invalidate regions in existing caches which allow users to update cache as its underlying layer changes without having to rebuild a new cache. Also, it provides for control over the drawing characteristics of the cache.
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. |
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. |
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 |
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 |
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. |
Method Detail |
---|
void init(IMap map, ILayer layer) throws IOException, AutomationException
Calling any of the DynamicCacheLayerManager methods or properties before calling Init will result in an exception!
map
- A reference to a com.esri.arcgis.carto.IMap (in)layer
- A reference to a com.esri.arcgis.carto.ILayer (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.String getFolderName() throws IOException, AutomationException
The folder name is composed of a clean layer name (layer name without special characters) plus a global unique identifier (GUID).
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.String getFolderPath() throws IOException, AutomationException
Returns the full Path of the Parent Folder of the cache that is associated with the layer.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setFolderPath(String folderPath) throws IOException, AutomationException
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.
folderPath
- The folderPath (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isCacheable() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void delete() throws IOException, AutomationException
If the dynamic display is active, the cache will be recreated once the delete method is called.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void invalidate(IEnvelope extent, boolean doubleBuffer) throws IOException, AutomationException
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.
extent
- A reference to a com.esri.arcgis.geometry.IEnvelope (in)doubleBuffer
- The doubleBuffer (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.String getFormat() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setFormat(String format) throws IOException, AutomationException
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.
format
- The format (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void connect(String newFolderPath, String newFolderName) throws IOException, AutomationException
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:
newFolderPath
- The newFolderPath (in)newFolderName
- The newFolderName (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void update(IEnvelope extent, double fromMapScale, double targetMapScale, int updateMode) throws IOException, AutomationException
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:
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)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isConsolidatedGroupLayer() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setConsolidatedGroupLayer(boolean consolidated) throws IOException, AutomationException
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.
consolidated
- The consolidated (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isStrictOnDemandMode() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setStrictOnDemandMode(boolean strictOnDemandMode) throws IOException, AutomationException
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.
strictOnDemandMode
- The strictOnDemandMode (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.double getMaxCacheScale() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setMaxCacheScale(double maxScale) throws IOException, AutomationException
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.
maxScale
- The maxScale (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.double getDetailsThreshold() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setDetailsThreshold(double threshold) throws IOException, AutomationException
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.
threshold
- The threshold (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getProgressiveDrawingLevels() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setProgressiveDrawingLevels(int numOfProgressiveLevels) throws IOException, AutomationException
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.
numOfProgressiveLevels
- The numOfProgressiveLevels (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.int getProgressiveFetchingLevels() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setProgressiveFetchingLevels(int numOfProgressiveLevels) throws IOException, AutomationException
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.
numOfProgressiveLevels
- The numOfProgressiveLevels (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.boolean isAlwaysDrawCoarsestLevel() throws IOException, AutomationException
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.
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.void setAlwaysDrawCoarsestLevel(boolean alwaysDrawCoarsestLevel) throws IOException, AutomationException
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.
alwaysDrawCoarsestLevel
- The alwaysDrawCoarsestLevel (in)
IOException
- If there are interop problems.
AutomationException
- If the ArcObject component throws an exception.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |