ILayerDescription Interface

Provides access to the available properties of a layer description object.

When To Use

Use the ILayerDescription interface to access read and write properties of a layer.

Members

Name Description
Read/write property DefinitionExpression The definition expression for the layer.
Read/write property ID The layer ID. This is a unique ID for the layer, and is used to identify the layer in a number of method calls.
Read/write property LayerResultOptions Indicate whether to include and/or modify Geometry.
Read/write property ScaleSymbols Indicates whether the layer should scale its symbols according to the reference scale.
Read/write property SelectionBufferDistance The selection buffer distance. When drawing, and if a selection filter is specified, a buffer zone of the specified distance will be displayed around the selected features.
Read/write property SelectionFeatures Array of selected features.
Read/write property ShowLabels Indicates whether the layer should display its dynamic labels.
Read/write property ShowSelectionBuffer Indicates whether the selection buffer should be displayed.
Read/write property Visible Indicates whether the layer is visible as defined in the TOC (i.e. marked on).

ILayerDescription.DefinitionExpression Property

The definition expression for the layer.

Public Property DefinitionExpression As String
public string DefinitionExpression {get; set;}

Remarks

A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This only applies for therequest and does not replace the definition query set in the sourcemap.

When UseStandardizedQueries is True:

  • the DefintionExpression of a LayerDescription retrieved from IMapServerInfo.DefaultMapDescription is always empty regardless of whether a definition expression is set on the layer in the source map. Use IMapTableInfo3::DefinitionExpression, to find out what is the definition expression set, if there is any, to the layer in the source map.
  • an expression set in the LayerDescription will be appened to the one set for the layer in the source map.
  • you can only use StandardizedQueries. This means you will always format a query on a date field the same way or if you want to find all features where the value in a string field contains a specified keyword, you can use the same function name regardless of the underlying database type. Queries containing anything specific to the underlying database, for example, a function that is only supported by the database but is not part of the StandardizedQueries specification will fail.

When UseStandardizedQueries is False:

  • a layer can have a default definition expression that is set for that layer in the source map.
  • an expression set in the LayerDescription will override the one set for the layer in the source map.
  • the query must conform to the underlying database's syntax and use functions supported by that database.

Let's look at some examples. You have a layer in your map that represents sales regions. The layer includes fields: REGIONS, SALES and MANAGER.

Example #1: In the source map the layer has a definition query, "REGION = North". No DefintionExpression is specified in LayerDescription. Only those features where REGION = North will be displayed in your map.

Example #2: In the source map the layer has a definition query, "REGION = �North�". You apply a DefinitionExpression in LayerDescription as "SALES > 1000". The LayerDescription DefinitionExpression overrides the definition query set in the source map. Only those features where SALES > 1000 will be displayed in your map.

If you wish to use the DefinitionExpression as a way of getting a subset of the features already filtered by the definition query in the map you will need to save the original expression and then add it to the new expression to form one compound expression, �REGION = �North� AND SALES > 1000�. This will display map features that are belong to the North region and have sales over 1000.

Example #3: In the source map the layer has no definition query. You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Only those features where SALES > 1000 will be displayed in your map.

The following MapServer methods will honor DefinitionExpression: Find, Identify, QueryFeatureCount2, QueryFeatureIds2, QueryFeatureData2 and QueryHyperlinks2.

Although the DefinitionExpression set in the LayerDescription will override any any definition query set in the source map, there are MapServer methods that only honor the expression set in the source document. Any expression set in DefinitionExpression in the LayerDescription will be ignored. These mothods include: QueryFeatureCount, QueryFeatureIds, and QueryFeatureData. MapDescription, which contains the LayerDescriptions, are not a parameter for these methods.

DefinitionExpression does not affect spatial extents.

ILayerDescription.ID Property

The layer ID. This is a unique ID for the layer, and is used to identify the layer in a number of method calls.

Public Property ID As Integer
public int ID {get; set;}

Remarks

ID is a unique identifier for a layer in a given instance of ArcGIS for Server map service. It is important to note that ID, SourceID and the index of layers (see MapLayerInfos) in map document are not the same. SourceID is used for map service interaction with the GPServer.

When a map service is published, a unique ID is assigned to all layers within the original map document (.mxd) starting from 0 (zero). This ID is accessible from IMapServerObjects2, MapLayerInfo, LayerDescription, MapServerLegendInfo, MapServerIdentifyResult, MapServerFindResult and FeatureExtent.

ID is not re-usable and does not change if the order of the layer is changed. This would change the how each layer is ordered in the index of layers. Adding new a layer results in a new ID being assigned. IDs keep incrementing as new layers are added to the map service. The limit of id numbers available is the limit of Long data type.

Please note that if the layer order in the TOC of the original map is changed or if layers are added/removed, the IDs will change accordingly.

ILayerDescription.LayerResultOptions Property

Indicate whether to include and/or modify Geometry.

Public Property LayerResultOptions As ILayerResultOptions
public ILayerResultOptions LayerResultOptions {get; set;}

ILayerDescription.ScaleSymbols Property

Indicates whether the layer should scale its symbols according to the reference scale.

Public Property ScaleSymbols As Boolean
public bool ScaleSymbols {get; set;}

Remarks

In order for symbols to scale, the map must have a reference scale set and the layer must support symbol scaling. Use ScaleSymbols to activate or deactivate a layer's symbol scaling. If a map does not have a set reference scale setting, ScaleSymbols will have no effect. Use CanScaleSymbols on IMapLayerInfo2 to verify if a layer supports symbol scaling. A reference scale is set within the original map document.

You can set a new reference scale for the MapServer object by accessing the IMap interface through IMapServerObjects2. This should be done with objects in a non-pooled environment. Changing the state of pooled objects this way will lead to unexpected results.

ILayerDescription.SelectionBufferDistance Property

The selection buffer distance. When drawing, and if a selection filter is specified, a buffer zone of the specified distance will be displayed around the selected features.

Public Property SelectionBufferDistance As Double
public double SelectionBufferDistance {get; set;}

Remarks

The selection buffer is based on Euclidian distance. The accuracy of the buffer is dependent on the spatial reference used in the map. An inappropriate spatial reference will result in inaccurate buffer distances. For best results, the map should be in an appropriate spatial reference.

In order to control the amount of information MapServer needs to process for a buffer, a maximum number of records to be buffered can be set. This value is contained in the MaxBufferCount property. The default value for this property is 100. If the number of features to be buffered exceeds MaxBufferCount no features will be buffered. The MaxBufferCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

The following sample code shows how to create a buffer around selected features. It assumes that you already have a valid MapServer and MapDescription object.

ILayerDescription.SelectionFeatures Property

Array of selected features.

Public Property SelectionFeatures As IFIDSet
public IFIDSet SelectionFeatures {get; set;}

Remarks

If you want to clear the selection, set SelectionFeatures to Null/Nothing. If you forget to do this, the previous selection will be added to the current selection.

ILayerDescription.ShowLabels Property

Indicates whether the layer should display its dynamic labels.

Public Property ShowLabels As Boolean
public bool ShowLabels {get; set;}

Remarks

This only applies to layers where the property HasLabels on IMapLayerInfo2 is TRUE. This means that the layer's labels must be "on" in the original map document.

ILayerDescription.ShowSelectionBuffer Property

Indicates whether the selection buffer should be displayed.

Public Property ShowSelectionBuffer As Boolean
public bool ShowSelectionBuffer {get; set;}

Remarks

The selection buffer is based on Euclidian distance. The accuracy of the buffer is dependent on the spatial reference used in the map. An inappropriate spatial reference will result in inaccurate buffer distances. For best results, the map should be in an appropriate spatial reference.

In order to control the amount of information MapServer needs to process for a buffer, a maximum number of records to be buffered can be set. This value is contained in the MaxBufferCount property. The default value for this property is 100. If the number of features to be buffered exceeds MaxBufferCount no features will be buffered. The MaxBufferCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

The following sample code shows how to create a buffer around selected features. It assumes that you already have a valid MapServer and MapDescription object.

ILayerDescription.Visible Property

Indicates whether the layer is visible as defined in the TOC (i.e. marked on).

Public Property Visible As Boolean
public bool Visible {get; set;}

Remarks

This property only reflects the layer's on/off state in the TOC. A layer's visibility property may be TRUE and the layer may still not be visible on the map. This occurs when a layer is marked "on" but is not drawn in the map display because its display is dependent on the scale of the map.

Use VisibleLayers on IMapImage to retrieve an array of layers that are both "on" in the TOC and visible in the map display.

You can also use MinScale and MaxScale on IMapLayerInfo2 to see if the layer has any scale dependencies and then use MapScale on IMapImage or ComputeScale on IMapServer2 to determine the map scale. If the map scale falls outside the specified scale range set for the layer, the layer will not display.

Classes that implement ILayerDescription

Classes Description
LayerDescription The Layer Description coclass contains settings of a layer in a map.

Remarks

Please note the difference of use between IMapLayerInfo and ILayerDescription: Use ILayerDescription to access layer settings that can be changed on the server object without changing the state of the underlying fine-grained ArcObjects that the layer is based on. MapLayerInfo is used to retrieve information about a layer that can only be changed by directly accessing the map document or the fine-grained ArcObjects it is based on.

In some cases you may want limit or adjust the geometry being returned in the find result. This can be done for performance reasons. Use ILayerResultOptions to manage this. If IncludeGeometry is set to False, FeatureShape returns nothing. This should increase performance in cases where feature geometry is large. You can also choose to densify or generalize the geometry returned in FeatureShape using GeometryResultOptions. Densification is used to better support clients that do not support Arcs (e.g. Bezier, Circular etc.). Generalization reduces the amount of geography being sent across the network and should lead to better performance. If LayerResultOptions are not specified for the LayerDescription, query results will include the original geometry.

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.