com.esri.arcgis.carto
Class MapServerIP

java.lang.Object
  extended by com.esri.arcgis.carto.MapServerIP
All Implemented Interfaces:
IMapServer, IMapServer2, ITiledMapServer, ITiledMapServer2, IAGSServerObject, IAGSServerObject2, com.esri.arcgis.interop.RemoteObjRef, Serializable

public class MapServerIP
extends Object
implements com.esri.arcgis.interop.RemoteObjRef, IAGSServerObject2, IAGSServerObject, IMapServer, IMapServer2, ITiledMapServer, ITiledMapServer2

Map Server Message Proxy.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

See Also:
Serialized Form

Constructor Summary
MapServerIP()
          Constructs a MapServerIP using ArcGIS Engine.
MapServerIP(Object obj)
          Deprecated. As of ArcGIS 9.2, replaced by normal Java casts.
MapServerIP theMapServerIP = (MapServerIP) obj;
 
Method Summary
 double computeDistance(String mapName, IPoint fromPoint, IPoint toPoint, int units)
          Computes the distance between two points on the specified map.
 double computeScale(IMapDescription mapDesc, IImageDisplay mapDisplay)
          Computes the scale of the specified map, at the given map extent, for an image with the given size.
 boolean equals(Object o)
          Compare this object with another
 IMapImage exportMapImage(IMapDescription mapDesc, IImageDescription imageDesc)
          Generates an image of the map, based on the given map description, and writes the image to a specified file on disk.
 IImageResult exportScaleBar(IScaleBar scalebar, IMapDescription mapDesc, IImageDisplay pMapDisplay, IColor backgroundColor, IImageDescription imageDesc)
          Exports a scale bar to an image file.
 IMapServerFindResults find(IMapDescription mapDesc, IImageDisplay mapImage, String searchString, boolean contains, String searchFields, int option, ILongArray layerIds)
          Returns a collection of Map Server Find Result objects that contain the given search string.
 void fromMapPoints(IMapDescription mapDescription, IImageDisplay mapDisplay, IPointCollection mapPoints, ILongArray[] screenXValues, ILongArray[] screenYValues)
          Converts a map coordinate to a screen location.
 ICacheControlInfo getCacheControlInfo(String mapName)
          Gets the cache description information for a given map.
 ICacheDescriptionInfo getCacheDescriptionInfo(String mapName)
          Gets the cache description information for a given map.
 String getCacheName(String mapName, int layerID)
          Gets the cache name for a given layer within a map.
static String getClsid()
          getClsid.
 String getDefaultMapName()
          Name of the document's active map (data frame).
 IPropertySet getDocumentInfo()
          A set of name-value pairs for properties set for the map document (mxd only).
 IName getFullName()
          The AGSServerConnectionName object associated with the server object.
 int getHttpTimeout()
          The maximum time in seconds to wait for a response from the server (Internet only).
 byte[] getLayerTile(String mapName, int layerID, int level, int row, int column)
          Gets a tile for a given tile location from a given layer.
 byte[] getLayerTileEx(String mapName, int layerID, int level, int row, int column, int cacheFormat)
          Gets a tile for a given tile location from a given layer.
 IMapServerLegendInfos getLegendInfo(String mapName, ILongArray layerIds, IMapServerLegendPatch patch, IImageType imgType)
          Returns a collection of Map Server Legend Info objects for the specified layers.
 int getMapCount()
          The number of maps (data frames) in the document.
 String getMapName(int index)
          Name of the map (data frame) as indicated by the index.
 byte[] getMapTile(String mapName, int level, int row, int column)
          Gets a tile for a given tile location from a given map.
 byte[] getMapTileEx(String mapName, int level, int row, int column, int cacheFormat)
          Gets a tile for a given tile location from a given map.
 IMapServerInfo getServerInfo(String mapName)
          Returns information about a map (data frame).
 IPropertySet getServiceConfigurationInfo()
          A set of name-value pairs for properties set for the MapServer Service Configuration Restrictions.
 ISQLSyntaxInfo getSQLSyntaxInfo(String mapName, int layerID)
          Returns the SQL syntax information for the specified layer.
 int getSupportedImageReturnTypes()
          The supported image return types for the map server.
 ITileCacheInfo getTileCacheInfo(String mapName)
          Gets the cache configuration for a given map.
 ITileImageInfo getTileImageInfo(String mapName)
          Gets the cache tile image information for a given map.
 String getVirtualCacheDirectory(String mapName, int layerID)
          Gets the virtual cache directory for a given layer within a map.
 int hashCode()
          the hashcode for this object
 boolean hasLayerCache(String mapName, int layerID)
          Indicates if a given layer has a single tile cache.
 boolean hasSingleFusedMapCache(String mapName)
          Indicates if a given map has a single fused map tile cache.
 IMapServerIdentifyResults identify(IMapDescription mapDesc, IImageDisplay mapImage, IGeometry searchShape, int tolerance, int option, ILongArray layerIds)
          Returns a collection of Map Server Identify Result objects at the given location.
 boolean isFixedScaleMap(String mapName)
          Indicates if a given map is a fixed scale map.
 int queryFeatureCount(String mapName, int layerID, IQueryFilter filter)
          Returns the count of the features that meet the query filter selection criteria for the specified layer.
 int queryFeatureCount2(String mapName, ILayerDescription pLayerDescription, IQueryFilter filter)
          Returns the count of the features that meet the query filter selection criteria for the specified layer.
 IRecordSet queryFeatureData(String mapName, int layerID, IQueryFilter filter)
          Returns a record set of features that meet the query filter selection criteria for the specified layer.
 IQueryResult queryFeatureData2(String mapName, ILayerDescription pLayerDesciscription, IQueryFilter filter, IQueryResultOptions options)
          Returns a record set of features that meet the query filter selection criteria for the specified layer.
 IFIDSet queryFeatureIDs(String mapName, int layerID, IQueryFilter filter)
          Returns the IDs of the features that meet the query filter selection criteria for the specified layer.
 IFIDSet queryFeatureIDs2(String mapName, ILayerDescription pLayerDesciscription, IQueryFilter filter)
          Returns the IDs of the features that meet the query filter selection criteria for the specified layer.
 IMapServerHyperlinks queryHyperlinks(IMapDescription mapDesc, IImageDisplay mapImage, ILongArray layerIds)
          Returns a collection of Map Server Hyperlink objects for the specified layers.
 void setHttpTimeout(int secs)
          The maximum time in seconds to wait for a response from the server (Internet only).
 IPointCollection toMapPoints(IMapDescription mapDescription, IImageDisplay mapDisplay, ILongArray screenXValues, ILongArray screenYValues)
          Converts a screen location to a map coordinate.
 
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

MapServerIP

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

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

MapServerIP

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

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

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

getFullName

public IName getFullName()
                  throws IOException,
                         AutomationException
The AGSServerConnectionName object associated with the server object.

Product Availability

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

Specified by:
getFullName in interface IAGSServerObject2
Returns:
A reference to a com.esri.arcgis.system.IName
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

setHttpTimeout

public void setHttpTimeout(int secs)
                    throws IOException,
                           AutomationException
The maximum time in seconds to wait for a response from the server (Internet only).

Product Availability

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

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

getHttpTimeout

public int getHttpTimeout()
                   throws IOException,
                          AutomationException
The maximum time in seconds to wait for a response from the server (Internet only).

Product Availability

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

Specified by:
getHttpTimeout in interface IAGSServerObject2
Returns:
The secs
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getDocumentInfo

public IPropertySet getDocumentInfo()
                             throws IOException,
                                    AutomationException
A set of name-value pairs for properties set for the map document (mxd only). These properties are string values set in the map document's Map Properties dialog and include: Title, Subject, Author, Category, Keywords and Comments.

Remarks

Optimized MapServer also returns two additional properties – AntialiasingMode and TextAntialiasingMode. Return values for AntialiasingMode are Fastest, Fast, Normal, Best or None, TextAntialiasingMode returns None, Normal or Force.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getDocumentInfo in interface IMapServer
Specified by:
getDocumentInfo in interface IMapServer2
Returns:
A reference to a com.esri.arcgis.system.IPropertySet
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getMapCount

public int getMapCount()
                throws IOException,
                       AutomationException
The number of maps (data frames) in the document.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getMapCount in interface IMapServer
Specified by:
getMapCount in interface IMapServer2
Returns:
The count
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getMapName

public String getMapName(int index)
                  throws IOException,
                         AutomationException
Name of the map (data frame) as indicated by the index. The first beginning with 0.

Product Availability

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

Specified by:
getMapName in interface IMapServer
Specified by:
getMapName in interface IMapServer2
Parameters:
index - The index (in)
Returns:
The mapName
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getDefaultMapName

public String getDefaultMapName()
                         throws IOException,
                                AutomationException
Name of the document's active map (data frame).

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getDefaultMapName in interface IMapServer
Specified by:
getDefaultMapName in interface IMapServer2
Returns:
The mapName
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getServerInfo

public IMapServerInfo getServerInfo(String mapName)
                             throws IOException,
                                    AutomationException
Returns information about a map (data frame).

Remarks

This method returns a MapServerInfo object. Using IMapServerInfo2 you can retrieve information regarding the present state of the MapServer object. If two (or more) data frames have the same name, Map Server adds a distinctive number at the end of the second name. E.g. Layers and Layers2.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getServerInfo in interface IMapServer
Specified by:
getServerInfo in interface IMapServer2
Parameters:
mapName - The mapName (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapServerInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

exportMapImage

public IMapImage exportMapImage(IMapDescription mapDesc,
                                IImageDescription imageDesc)
                         throws IOException,
                                AutomationException
Generates an image of the map, based on the given map description, and writes the image to a specified file on disk. Supported file types are: 'bmp', 'jpg', 'tif', 'png'/'png8', 'png24', 'emf', 'ps', 'pdf', 'ai', 'gif', and 'svg'/'svgz'.

Remarks

Use ExportMapImage to retrieve a file (image or vector format) of the map.

The input parameter MapDescription contains properties describing the map (also known as the data frame). These include the map's Name, the MapArea, the SpatialReference , as well as collections of LayerDescription objects. Size, resolution and file format are determined by the ImageDescription, which includes ImageDisplay and ImageType objects.

ExportMapImage returns a MapImage object. MapExtent, MapScale and an array of VisibleLayers can be retrieved from the MapImage.

You can export the map to either a vector or an image type. This is specified by the ReturnType property of IImageType.

Setting the size and resolution of the output

Size and resolution are set in the ImageDisplay. Both Height and Width are required. The Height and Width properties of IImageResult are read-only and are not used to make changes. In order to control the size of an exported image, IMapServerInit2 contains two properties: MaxImageHeight and MaxImageWidth. The default value for these properties is 1024 pixels.

You should be careful when specifying a DeviceResolution to the ImageDisplay. Changing the DeviceResolution may lead to unintended changes in the map scale. For example, you export a map image to JPG. You specify an image of 400 pixels by 600 pixels with the DeviceResolution set at 96. The relative MapScale of the resulting image is around 54,000,000. Next, you increase the DeviceResolution to 300 while keeping the size constant. The MapScale of this result is about 205,000,000. The result may not be want you wanted if the map contains layers or labels that are scale-dependent. In order to to maintain the MapScale at around 1:54,000,000 you would need to export a larger image.

If you are exporting to PDF you will need to keep in mind that PDF exits in page space. Setting the Height and Width sets the dimensions of the PDF page. For example, you export a map image to PDF where the ImageDisplay Height is 400 and the Width is 500. The DeviceResolution is 100. The resulting PDF is 4 inches by 5 inches. Holding the Height and Width settings constant, as you increase the DeviceResolution the actual size of the PDF will get smaller. As you decrease the DeviceResolution the size of the PDF gets larger. This will also affect MapScale. If you wish the MapScale to stay constant you will need to increase (or decrease) the ImageDisplay Height and Width values as you increase (or decrease) the DeviceResolution.

Image quality and image type of optimized MapServer

Miscellaneous

Exporting a map is different than exporting a layout. Page space is an important component of ExportLayout. It exists for all map documents and the map services the documents are based on. This page space provides the default size of the exported layout (for best results you should use this default). Page space does not exist in ExportMapImage. Therefore, you will see differences in results when adjusting the Height, Width or DeviceResolution for a ExportMapImage as compared to making similar adjustments for ExportLayout.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
exportMapImage in interface IMapServer
Specified by:
exportMapImage in interface IMapServer2
Parameters:
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
imageDesc - A reference to a com.esri.arcgis.carto.IImageDescription (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapImage
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

find

public IMapServerFindResults find(IMapDescription mapDesc,
                                  IImageDisplay mapImage,
                                  String searchString,
                                  boolean contains,
                                  String searchFields,
                                  int option,
                                  ILongArray layerIds)
                           throws IOException,
                                  AutomationException
Returns a collection of Map Server Find Result objects that contain the given search string. If LayerIDs is Nothing/Null or empty, all layers are searched.

Remarks

Find performs a search based on a string value. This search can be conducted on a single field of a single layer, on many fields of a single layer or on many fields on many layers. Find returns a collection of objects that implement IMapServerFindResult.

Find requires a number of input parameters. These include: a MapDescription, an ImageDisplay, the search string, a Boolean value on whether the search string is an exact match (False) or not (True), a comma delimited list of string values for the names of the fields you want to search, the esriFindOption, and an array of layer Ids to be searched.

MapDescription

The MapDescription contains all the LayerDescriptions in the map. These LayerDescriptions include a DefinitionExpression property. A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be set in the source map document as a definition query, or can be set using the DefinitionExpression property. The DefinitionExpression set in the LayerDescription will override any any definition query set in the source map. MapServer Find results should honor any definition query or DefinitionExpression set on the layer.

ImageDisplay

This is needed to determine whether layers are visible or not based on the current map scale.

Search Fields

If the searchFields parameter is blank all fields will be searched.

esriFindOption

The esriFindOption parameter includes: esriFindAllLayers and esriFindVisibleLayers. If esriFindAllLayers is being used all layers are valid. If esriFindVisibleLayers is used, the search will be conducted only on layers that are visible in the map display. Layer visibility depends on whether the layer is on or off (the Visible property on ILayerDescription3) or whether the layer is on, but not visible due to scale dependencies (the MinScale and MaxScale properties on IMapLayerInfo2). The mapImage parameter is needed to determine whether the layer is not visible based on scale dependencies. This parameter can be Nothing/Null if esriFindAllLayers is used.

The parameters esriFindOption and LayerIDs behave like a boolean AND. There is no precedence. For example: if esriFindOption is esriFindVisibleLayers and pLayerIDs is Nothing/Null or empty, all the visible layers are searched. If esriFindOption is esriFindVisibleLayers and pLayerIDs contains only the first layer, the first layer is searched only if it is visible.

Results

Find always honors field visibility, and by default it respects field aliases and field formatting set in the source map document. If you want to use field names instead of field aliases, set ReturnFieldNamesInResults to True. When you want to have value in original data type (i.e. as Double instead of formatted string) so that you can do some computation (e.g. change the numeric or date to your locale settings), set FormatValuesInResults to False. It is important to note that these properties are only honored when the layer being searched implements IFeatureLayer (e.g. FeatureLayer). If the feature being queried has more than one field with the same alias (e.g. when joined), only one will be passed back to the client and the rest will be dropped from the result.

Geometry is always returned in the same spatial reference system as the DefaultMapDescription, even though the source data of a layer may be in a different coordinate system. The value of the Shape field in the result is a string showing the type of the geometry. To get the geometry associated with the result, use the IMapServerFindResult::FeatureShape property instead.

In some cases, for performance reasons, you may want limit or adjust the geometry being returned in the find result. 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. When ILayerResultOptions is not used, FeatureShape returns geometry. If the Shape field is invisible in the source map, FeatureShape may still contain geometry depending on how IncludeGeometry is set by the user. 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.

Miscellaneous

There are two key differences between Find and the IMapServer2 methods QueryFeatureCount, QueryFeatureIDs and QueryFeatureData. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

In order to control the amount of information MapServer needs to process for a query, a maximum number of records can be set. This value is contained in the MaxRecordCount property on IMapServerInit2. The default value for this property is 500. If 600 features match a given query only the first 500 results will be returned. You will be unable to access the remaining 100 records. To be able to access these records the MaxRecordCount would need to be increased to 600. MaxRecordCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
find in interface IMapServer
Specified by:
find in interface IMapServer2
Parameters:
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapImage - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
searchString - The searchString (in)
contains - The contains (in)
searchFields - The searchFields (in)
option - A com.esri.arcgis.carto.esriFindOption constant (in)
layerIds - A reference to a com.esri.arcgis.system.ILongArray (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapServerFindResults
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

identify

public IMapServerIdentifyResults identify(IMapDescription mapDesc,
                                          IImageDisplay mapImage,
                                          IGeometry searchShape,
                                          int tolerance,
                                          int option,
                                          ILongArray layerIds)
                                   throws IOException,
                                          AutomationException
Returns a collection of Map Server Identify Result objects at the given location. If LayerIDs is Nothing/Null or empty, all layers are searched.

Remarks

Identify returns map features and their attribute values based on a search location. This can be conducted on an individual layer, the top-most layer, all layers, or just on all the visible layers. This method returns a collection of objects that implement IMapServerIdentifyResult.

Identify requires a number of input parameters. These include: a MapDescription, an ImageDisplay, a search shape, a tolerance, the esriIdentifyOption, and an array of layer Ids to be identified.

MapDescription

The MapDescription contains all the LayerDescriptions in the map. These LayerDescriptions include a DefinitionExpression property. A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be set in the source map document as a definition query, or can be set using the DefinitionExpression property. The DefinitionExpression set in the LayerDescription will override any any definition query set in the source map. MapServer Identify results should honor any definition query or DefinitionExpression set on the layer.

ImageDisplay

This is needed to determine whether layers are visible or not based on the current map scale.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

esriIdentifyOption

The esriIdentifyOption parameter includes: esriIdentifyAllLayers, esriIdentifyVisibleLayers and esriIdentifyTopmost. If esriIdentifyAllLayers is being used all features for all layers in the map that fall within the tolerance value of the searchShape will be returned. If esriIdentifyVisibleLayers is used then only features from visible layers are returned. Layer visibility depends on whether the layer is on or off (the Visible property on ILayerDescription3) or whether the layer is on, but not visible due to scale dependencies (the MinScale and MaxScale properties on IMapLayerInfo2). The mapImage parameter is needed to determine whether the layer is not visible based on scale dependencies. The esriIdentifyOption esriIdentifyTopmost refers to the visible layer that is topmost in the map drawing order at the location specified by searchShape.

Layer IDs

The parameters esriIdentifyOption and LayerIDs behave like a boolean AND. There is no precedence. For example: if esriIdentifyOption is esriIdentifyVisibleLayers and pLayerIDs is Nothing/Null or empty, all the visible layers are searched. If esriIdentifyOption is esriIdentifyVisibleLayers and pLayerIDs contains only the first layer, the first layer is searched only if it is visible.

Results

Identify always honors field visibility always, and by default it respects field aliases and field formatting set in the source map document. If you want to use field names instead of field aliases, set ReturnFieldNamesInResults to True. When you want to have value in original data type (i.e. as Double instead of formatted string) so that you can do some computation (e.g. change the numeric or date to your locale settings), set FormatValuesInResults to False. It is important to note that these properties are only honored when the layer being identified implements IFeatureLayer (e.g. FeatureLayer). The optimized MapServer does not support standalone tables (.dbf), relationships to a standalone table thus ignore field visibility, or formatting and aliases set in the map document (.mxd)

Geometry is always returned in the same spatial reference system as the DefaultMapDescription, even though the source data of a layer may be in a different coordinate system. The value of the Shape field in the IMapServerIdentifyResult::PropetySet or in related IMapServerRow::PropertySet is a string showing the type of the geometry. To get the geometry associated with the result, use the IMapServerIdentifyResult::Shape property instead. Identify does not return geometry associated with any related feature. If the feature being identified has more than one field with the same alias (e.g. when joined), only one will be passed back to the client and the rest will be dropped from the result.

In some cases, for performance reason, you may want limit or adjust the geometry being returned in the identify result. Use ILayerResultOptions to manage this. If IncludeGeometry is set to False, Shape property returns nothing. This should increase performance in cases where feature geometry is large. When ILayerResultOptions is not used, the Shape property returns geometry. If the Shape field is invisible in the source map, the Shape property may still contain geometry depending on how IncludeGeometry is set by the user. You can also choose to densify or generalize the returned geometry by 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.

Miscellaneous

In order to control the amount of information MapServer needs to process for a query, a maximum number of records can be set. This value is contained in the MaxRecordCount property on IMapServerInit2. The default value for this property is 500. If 600 features match a given query only the first 500 results will be returned. You will be unable to access the remaining 100 records. To be able to access these records the MaxRecordCount would need to be increased to 600. MaxRecordCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

If the layer being identified has a relationship to other tables, the IMapServerRelationship and IMapServerRow interfaces provide access to properties of the relationship and related tables. The number of rows returned is not limited by MaxRecordCount.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
identify in interface IMapServer
Specified by:
identify in interface IMapServer2
Parameters:
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapImage - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
searchShape - A reference to a com.esri.arcgis.geometry.IGeometry (in)
tolerance - The tolerance (in)
option - A com.esri.arcgis.carto.esriIdentifyOption constant (in)
layerIds - A reference to a com.esri.arcgis.system.ILongArray (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapServerIdentifyResults
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureCount

public int queryFeatureCount(String mapName,
                             int layerID,
                             IQueryFilter filter)
                      throws IOException,
                             AutomationException
Returns the count of the features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureCount returns the number of map features that match the parameters of a given query filter.

QueryFeatureCount requires a number of input parameters. These include: a MapName, LayerID, and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, or a combination of both.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

Miscellaneous

MaxRecordCount does not affect QueryFeatureCount or QueryFeatureCount2.

There are two key differences between Find and QueryFeatureCount. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
queryFeatureCount in interface IMapServer
Specified by:
queryFeatureCount in interface IMapServer2
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
Returns:
The count
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureIDs

public IFIDSet queryFeatureIDs(String mapName,
                               int layerID,
                               IQueryFilter filter)
                        throws IOException,
                               AutomationException
Returns the IDs of the features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureIDs returns the IDs (FIDSet) of map features that match the parameters of a given query filter.

QueryFeatureIDs requires a number of input parameters. These include: a MapName, LayerID, and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, or a combination of both.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

Miscellaneous

MaxRecordCount does not affect QueryFeatureIDs or QueryFeatureIDs2.

There are two key differences between Find and QueryFeatureIDs. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

The results of this function can be used with LayerDescription::SelectionFeatures to display the selection in the exported image.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
queryFeatureIDs in interface IMapServer
Specified by:
queryFeatureIDs in interface IMapServer2
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
Returns:
A reference to a com.esri.arcgis.geodatabase.IFIDSet
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureData

public IRecordSet queryFeatureData(String mapName,
                                   int layerID,
                                   IQueryFilter filter)
                            throws IOException,
                                   AutomationException
Returns a record set of features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureData returns the records of map features that match the parameters of a given query filter. QueryFeatureData returns a RecordSet .

QueryFeatureData requires a number of input parameters. These include: a Name, LayerID, and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, a combination of both or null.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

It can be set to null or Nothing to retrieve all data (which is also limited by MaxRecordCount)

If geometry is not desired in the output RecordSet, IQuerFilter’s SubFields must be defined without ‘Shape’ field. When SubFields is empty or includes ‘Shape’, IRecordSet will include the fields "shape_length" and "shape_area". If the desired spatial reference of the output geometry is different than the original one, OutputSpatialReference should be used. Otherwise geometry is returned in the same spatial reference system as the DefaultMapDescription by default. When SubFields is not defined or = “*”, it returns all visible fields. Invisible or invalid field names or field aliases must not be included in SubField’s string or it will return an error. Duplicate field names are allowed in the SubFields except for a field of ObjectID type.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

Results

QueryFeatureData honors field visibility set in the source map document. Field aliases, set in the source map document, are honored only when working with the MapServer WSDL or accessing a MapServer object through an AGSServerConnection (LAN or internet), but not honored for DCOM connection. However, the RecordSet does NOT honor any field formatting set in the source map.

Geometry is always returned in the same spatial reference system as the DefaultMapDescription, even though the source data of a layer may be in a different coordinate system, unless OutputSpatialReference is explicitly set to another coordinate system by the user (for SOAP/WSDL, both OutputSpatialReference & SpatialReferenceFieldName properties must be set). To get the coordinate system, IField::GeometryDef should be used.

In some cases, may be for performance reasons, you may want to limit or adjust the geometry being returned in the record set result. You cannot adjust returned geometry using QueryFeatureData. You will need to use QueryFeatureData2 in order to do this.

In order to control the amount of information MapServer needs to process for a query, a maximum number of records can be set. This value is contained in the MaxRecordCount property on IMapServerInit2. The default value for this property is 500. If 600 features match a given query only the first 500 results will be returned. You will be unable to access the remaining 100 records. To be able to access these records the MaxRecordCount would need to be increased to 600. MaxRecordCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

Miscellaneous

There are two key differences between Find and QueryFeatureData. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
queryFeatureData in interface IMapServer
Specified by:
queryFeatureData in interface IMapServer2
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
Returns:
A reference to a com.esri.arcgis.geodatabase.IRecordSet
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryHyperlinks

public IMapServerHyperlinks queryHyperlinks(IMapDescription mapDesc,
                                            IImageDisplay mapImage,
                                            ILongArray layerIds)
                                     throws IOException,
                                            AutomationException
Returns a collection of Map Server Hyperlink objects for the specified layers. Only hyperlinks of visible layers are returned. If LayerIDs is Nothing/Null or empty, all layers are searched.

Remarks

QueryHyperlinks returns a collection of objects that implement IMapServerHyperlink.

QueryHyperlinks requires a number of input parameters. These include: a MapDescription, ImageDisplay, and LayerID.

MapDescription

The MapDescription contains all the LayerDescriptions in the map. These LayerDescriptions include a DefinitionExpression property. A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be set in the source map document as a definition query, or can be set using the DefinitionExpression property. The DefinitionExpression set in the LayerDescription will override any any definition query set in the source map. MapServer QueryHyperlinks results should honor any definition query or DefinitionExpression set on the layer.

ImageDisplay

This is needed to determine whether layers are visible or not based on the current map scale. Layer visibility depends on whether the layer is on or off (the Visible property on ILayerDescription3) or whether the layer is on, but not visible due to scale dependencies (the MinScale and MaxScale properties on IMapLayerInfo2).

Miscellaneous

In some cases, for performance reasons, you may want to adjust the geometry being returned in the QueryHyperlink result. Use ILayerResultOptions to manage this. You can choose to densify or generalize the returned geometry by 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. Setting IncludeGeometry property has no effect, QueryHyperLinks always returns geometry.

Geometry is always returned in the same spatial reference system as the DefaultMapDescription, even though the source data of a layer may be in a different coordinate system.

In order to control the amount of information MapServer needs to process for a query, a maximum number of records can be set. This value is contained in the MaxRecordCount property on IMapServerInit2. The default value for this property is 500. If 600 features match a given query only the first 500 results will be returned. You will be unable to access the remaining 100 records. To be able to access these records the MaxRecordCount would need to be increased to 600. MaxRecordCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
queryHyperlinks in interface IMapServer
Specified by:
queryHyperlinks in interface IMapServer2
Parameters:
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapImage - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
layerIds - A reference to a com.esri.arcgis.system.ILongArray (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapServerHyperlinks
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

computeScale

public double computeScale(IMapDescription mapDesc,
                           IImageDisplay mapDisplay)
                    throws IOException,
                           AutomationException
Computes the scale of the specified map, at the given map extent, for an image with the given size.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
computeScale in interface IMapServer
Specified by:
computeScale in interface IMapServer2
Parameters:
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapDisplay - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
Returns:
The scale
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

computeDistance

public double computeDistance(String mapName,
                              IPoint fromPoint,
                              IPoint toPoint,
                              int units)
                       throws IOException,
                              AutomationException
Computes the distance between two points on the specified map. The result is in the map units of the specified map.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
computeDistance in interface IMapServer
Specified by:
computeDistance in interface IMapServer2
Parameters:
mapName - The mapName (in)
fromPoint - A reference to a com.esri.arcgis.geometry.IPoint (in)
toPoint - A reference to a com.esri.arcgis.geometry.IPoint (in)
units - A com.esri.arcgis.system.esriUnits constant (in)
Returns:
The distance
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

toMapPoints

public IPointCollection toMapPoints(IMapDescription mapDescription,
                                    IImageDisplay mapDisplay,
                                    ILongArray screenXValues,
                                    ILongArray screenYValues)
                             throws IOException,
                                    AutomationException
Converts a screen location to a map coordinate.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
toMapPoints in interface IMapServer
Specified by:
toMapPoints in interface IMapServer2
Parameters:
mapDescription - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapDisplay - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
screenXValues - A reference to a com.esri.arcgis.system.ILongArray (in)
screenYValues - A reference to a com.esri.arcgis.system.ILongArray (in)
Returns:
A reference to a com.esri.arcgis.geometry.IPointCollection
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

fromMapPoints

public void fromMapPoints(IMapDescription mapDescription,
                          IImageDisplay mapDisplay,
                          IPointCollection mapPoints,
                          ILongArray[] screenXValues,
                          ILongArray[] screenYValues)
                   throws IOException,
                          AutomationException
Converts a map coordinate to a screen location.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
fromMapPoints in interface IMapServer
Specified by:
fromMapPoints in interface IMapServer2
Parameters:
mapDescription - A reference to a com.esri.arcgis.carto.IMapDescription (in)
mapDisplay - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
mapPoints - A reference to a com.esri.arcgis.geometry.IPointCollection (in)
screenXValues - A reference to a com.esri.arcgis.system.ILongArray (in/out: use single element array)
screenYValues - A reference to a com.esri.arcgis.system.ILongArray (in/out: use single element array)
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getLegendInfo

public IMapServerLegendInfos getLegendInfo(String mapName,
                                           ILongArray layerIds,
                                           IMapServerLegendPatch patch,
                                           IImageType imgType)
                                    throws IOException,
                                           AutomationException
Returns a collection of Map Server Legend Info objects for the specified layers. If layerIDs is Nothing/Null or empty, legend information for all layers is returned.

Remarks

Use GetLegendInfo to retrieve individual legend elements including the symbol image, labels, descriptions and headings. A common use would be to populate a table of contents. Note that composite layers such as group layers and annotation layers do not contain legend elements. To export a single image of the legend use ExportLegend on IMapServerLayout.

The GetLegendInfo method returns a collection of MapServerLegendInfo objects. Legends are associated with renderers that belong to each layer in a map. Each layer has a separate renderer. Each renderer has one or more legend groups. Each legend group has one or more legend classes. Customizing the legend patch can be done using IMapServerLegendPatch . When passing in "Nothing" for this input parameter ("patch") the default legend patch is used.

MapServerLegendInfo doesn't contain information about whether the data frame and the layers in the TOC are expanded or collapsed in the original map document. You have to write your own code to find this out.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getLegendInfo in interface IMapServer
Specified by:
getLegendInfo in interface IMapServer2
Parameters:
mapName - The mapName (in)
layerIds - A reference to a com.esri.arcgis.system.ILongArray (in)
patch - A reference to a com.esri.arcgis.carto.IMapServerLegendPatch (in)
imgType - A reference to a com.esri.arcgis.carto.IImageType (in)
Returns:
A reference to a com.esri.arcgis.carto.IMapServerLegendInfos
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getSQLSyntaxInfo

public ISQLSyntaxInfo getSQLSyntaxInfo(String mapName,
                                       int layerID)
                                throws IOException,
                                       AutomationException
Returns the SQL syntax information for the specified layer.

Product Availability

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

Supported Platforms

Windows, Solaris, Linux

Specified by:
getSQLSyntaxInfo in interface IMapServer
Specified by:
getSQLSyntaxInfo in interface IMapServer2
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
Returns:
A reference to a com.esri.arcgis.carto.ISQLSyntaxInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getSupportedImageReturnTypes

public int getSupportedImageReturnTypes()
                                 throws IOException,
                                        AutomationException
The supported image return types for the map server. A value of esriImageReturnMimeData means that only MIME data is supported. Otherwise, either MIME data or URLs are supported.

Product Availability

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

Specified by:
getSupportedImageReturnTypes in interface IMapServer
Specified by:
getSupportedImageReturnTypes in interface IMapServer2
Returns:
A com.esri.arcgis.carto.esriImageReturnType constant
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

exportScaleBar

public IImageResult exportScaleBar(IScaleBar scalebar,
                                   IMapDescription mapDesc,
                                   IImageDisplay pMapDisplay,
                                   IColor backgroundColor,
                                   IImageDescription imageDesc)
                            throws IOException,
                                   AutomationException
Exports a scale bar to an image file. The client can create the scaleBar object and set its desired properties appropriately. If scaleBar is Nothing/Null, a default scale bar will be generated.

Remarks

Use ExportScaleBar to retrieve the map's scale bar. To customize the scale bar pass in a ScaleBar object. If you pass in Nothing/Null for the input paramter ScaleBar, a default alternating scale bar is drawn. The scale is calculated according to the height and width of the the image (pMapDisplay). This ImageDisplay object refers to the map. Another ImageDisplay object will be used (as part of the imageDesc parameter) that refers to the Scale Bar image. A color background can be set for the ScaleBar swatch by using the backgroundColor parameter. If this is Nothing/Null a white background will be used. Use TransparentColor in IImageDisplay2 if you want the background to be transparent. Size, resolution and file format are determined by ImageDescription, which includes ImageDisplay and ImageType. ExportScaleBar returns an ImageResult object.

Use the height and width properties of IImageDisplay (as part of the imageDesc parameter) to set the proper size of the scalebar. Entering a 0 for either the height or the width for ExportScaleBar output results in an error.

Product Availability

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

Specified by:
exportScaleBar in interface IMapServer2
Parameters:
scalebar - A reference to a com.esri.arcgis.carto.IScaleBar (in)
mapDesc - A reference to a com.esri.arcgis.carto.IMapDescription (in)
pMapDisplay - A reference to a com.esri.arcgis.carto.IImageDisplay (in)
backgroundColor - A reference to a com.esri.arcgis.display.IColor (in)
imageDesc - A reference to a com.esri.arcgis.carto.IImageDescription (in)
Returns:
A reference to a com.esri.arcgis.carto.IImageResult
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureCount2

public int queryFeatureCount2(String mapName,
                              ILayerDescription pLayerDescription,
                              IQueryFilter filter)
                       throws IOException,
                              AutomationException
Returns the count of the features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureCount2 returns the number of map features that match the parameters of a given query filter.

QueryFeatureCount2 requires a number of input parameters. These include: a MapName, LayerDescription and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, or a combination of both.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

DefinitionExpressions

A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be also be set in the source map document as a definition query. Any DefinitionExpression set in the LayerDescription will override any definition query set in the source map. MapServer QueryFeatureCount2 honors DefinitionExpression.

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. Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be a count of all sale region features that fall within the North region and are managed by Bob.

Example #2: In the source map the layer has a definition query, "REGION = 'North'". You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be a count of all sale region features with sales over 1000 and are managed by Bob. QueryFeatureCount2 honors the DefinitionExpression set in LayerDescription. The DefinitionExpression overrides the definition query set in the source map. If you wish to include the layer's original defintion query, "REGION = 'North'" in your final query, you must include this in your QueryFilter, ""MANAGER = 'Bob' AND "REGION = 'North'".

Example #3: In the source map the layer has no definition query. You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be a count of all sale region features with sales over 1000 and are managed by Bob. QueryFeatureCount2 honors the DefinitionExpression set in LayerDescription.

Miscellaneous

MaxRecordCount does not affect QueryFeatureCount or QueryFeatureCount2.

There are two key differences between Find and QueryFeatureCount2. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

Product Availability

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

Specified by:
queryFeatureCount2 in interface IMapServer2
Parameters:
mapName - The mapName (in)
pLayerDescription - A reference to a com.esri.arcgis.carto.ILayerDescription (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
Returns:
The count
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureIDs2

public IFIDSet queryFeatureIDs2(String mapName,
                                ILayerDescription pLayerDesciscription,
                                IQueryFilter filter)
                         throws IOException,
                                AutomationException
Returns the IDs of the features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureIDs2 returns the IDs (FIDSet) of map features that match the parameters of a given query filter.

QueryFeatureIDs2 requires a number of input parameters. These include: a MapName, LayerID, and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, or a combination of both.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

DefinitionExpressions

A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be also be set in the source map document as a definition query. Any DefinitionExpression set in the LayerDescription will override any definition query set in the source map. MapServer QueryFeatureIDs2 honors DefinitionExpression.

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. Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be the ids of all sale region features that fall within the North region and are managed by Bob.

Example #2: In the source map the layer has a definition query, "REGION = 'North'". You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be the ids of all sale region features with sales over 1000 and are managed by Bob. QueryFeatureIDs2 honors the DefinitionExpression set in LayerDescription. The DefinitionExpression overrides the definition query set in the source map. If you wish to include the layer's original defintion query, "REGION = 'North'" in your final query, you must include this in your QueryFilter, ""MANAGER = 'Bob' AND "REGION = 'North'".

Example #3: In the source map the layer has no definition query. You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be the ids of all sale region features with sales over 1000 and are managed by Bob. QueryFeatureIDs2 honors the DefinitionExpression set in LayerDescription.

Miscellaneous

MaxRecordCount does not affect QueryFeatureIDs or QueryFeatureIDs2.

There are two key differences between Find and QueryFeatureIDs2. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

The results of this function can be used with LayerDescription::SelectionFeatures to display the selection in the exported image.

Product Availability

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

Specified by:
queryFeatureIDs2 in interface IMapServer2
Parameters:
mapName - The mapName (in)
pLayerDesciscription - A reference to a com.esri.arcgis.carto.ILayerDescription (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
Returns:
A reference to a com.esri.arcgis.geodatabase.IFIDSet
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

queryFeatureData2

public IQueryResult queryFeatureData2(String mapName,
                                      ILayerDescription pLayerDesciscription,
                                      IQueryFilter filter,
                                      IQueryResultOptions options)
                               throws IOException,
                                      AutomationException
Returns a record set of features that meet the query filter selection criteria for the specified layer.

Remarks

QueryFeatureData2 returns the records of map features that match the parameters of a given query filter. QueryFeatureData2 returns a QueryResult. A QueryResult format can be either KML or a RecordSet. The Format of the QueryResult is specified in QueryResultOptions. QueryResultOptions can also be used to specify a GeoTransformation if one is needed.

QueryFeatureData2 requires a number of input parameters. These include: a Name, LayerID, and a QueryFilter. The QueryFilter can be an attribute query (SQL espression), a spatial query, a combination of both or null. ILayerDescription2 has SourceID property that can be used to query against a GP result.

QueryFilter

QueryFilter provides the ability to query based on attribute filter (SQL expression) a spatial filter, or a combination of both. Attribute filters take any valid ‘non-GIS data specific’ SQL statement. For example, CNTRY_CODE = ‘BD’ or POPULATION = 12345. Syntax for querying date fields depend on the underlying data. If you are working with Shapefile or File GeoDatabase data the syntax is <FieldName> = date ‘YYYY-MM-DD’; for Access-based Personal GeoDatabase the sytax is #YYYY-MM-DD#. For SDE database, check with the specific database’s help.

It can be set to null or Nothing to retrieve all data (which is also limited by MaxRecordCount)

If geometry is not desired in the output RecordSet, IQuerFilter’s SubFields must be defined without ‘Shape’ field. When SubFields is empty or includes ‘Shape’, IRecordSet will include the fields "shape_length" and "shape_area". If the desired spatial reference of the output geometry is different than the original one, OutputSpatialReference should be used. Otherwise geometry is returned in the same spatial reference system as the DefaultMapDescription by default. When SubFields is not defined or = “*”, it returns all visible fields. Invisible or invalid field names or field aliases must not be included in SubField’s string or it will return an error. Duplicate field names are allowed in the SubFields except for a field of ObjectID type.

SearchShape

Geometry set in ISpatialFilter should meet the following criteria:

DefinitionExpressions

A DefinitionExpression can be set on a layer in order to limit layer features available for display or query. This expression can be also be set in the source map document as a definition query. Any DefinitionExpression set in the LayerDescription will override any definition query set in the source map. MapServer QueryFeatureData2 honors DefinitionExpression.

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. Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be all sale region features that fall within the North region and are managed by Bob.

Example #2: In the source map the layer has a definition query, "REGION = 'North'". You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be all sale region features with sales over 1000 and are managed by Bob. QueryFeatureData2 honors the DefinitionExpression set in LayerDescription. The DefinitionExpression overrides the definition query set in the source map. If you wish to include the layer's original defintion query, "REGION = 'North'" in your final query, you must include this in your QueryFilter, ""MANAGER = 'Bob' AND "REGION = 'North'".

Example #3: In the source map the layer has no definition query. You apply a DefinitionExpression in LayerDescription as "SALES > 1000". Your QueryFilter where clause is "MANAGER = 'Bob'". The result will be all sale region features with sales over 1000 and are managed by Bob. QueryFeatureData2 honors the DefinitionExpression set in LayerDescription.

Results

The result can be returned in two formats: KML and RecordSet.

KML
When KML is the desired output, it is passed back as a URL (when QueryResultFormat is esriQueryResultKMLAsURL) or as a MIME object (when QueryResultFormat is esriQueryResultKMLAsMime). The file or Mime is returned in compressed KMZ format.

Setting LayerResultOptions has no effect on KML output.

RecordSet
When esriQueryResultRecordSetAsObject is selected as QueryResultFormat, the function returns RecordSet as an Object. Use IQueryResult::Object property to access that. The returned object needs to be QI to IRecordSet.

QueryFeatureData2 honors field visibility set in the source map document. Field aliases, set in the source map document, are honored only when the connection to an ArcGIS Server is made using ArcGIS Server Client API (GISClient library ) or using SOAP/WSDL, but not honored for DCOM connection. However, the RecordSet does NOT honor any field formatting set in the source map.

Result Geometry

By default, geometry is returned in the same spatial reference as the DefaultMapDescription. The spatial reference of QueryFeatureData2 results can be set to something different than the DefaultMapDescription by using OutputSpatialReference. OutputSpatialReference is a property of IQueryFilter. For SOAP/WSDL users, both OutputSpatialReference & SpatialReferenceFieldName properties are required and must be set.

In some instances the result may require a GeoTransformation . For example, a given map service may be using a spatial reference system based on GCS_WGS_1984. A client wants to display QueryFeatureData2 results based on this map service in a different spatial reference, GCS_European_1950. The results will use the spatial reference of the DefaultMapDescription, GCS_WGS_1984, and display these results incorrectly in GCS_European_1950. Features may not "line up" correctly. In order to correctly display these results a GeoTransformation is needed. Applying the correct GeoTransformation ensures the spatial correctness of the result.

Another instance where a GeoTransformation may be need to be specified in the QueryResultsOption is if the queried layer is projected on the fly within the map service. That is, the coordinate system of the layer's source is different than the DefaultMapDescription coordinate system, and no appropriate transformation has been set in the map document before serving. In this case, you can access the coordinate system of a layer source by first getting the layer's MapLayerInfo, then get Fields from MapLayerInfo, get the Shape Field from Fields, get GeometryDef from Field, and finally, get the SpatialReference from GeometryDef.

A GeoTransformation is not needed if the projected coordinate systems share the same underlying geographic coordinate system. For best results it is optimal for data (layers within the map service), map service and MapServer output to use the same coordinate system.

In some cases, may be for performance reasons, you may want limit or adjust the geometry being returned in the record set result. Use ILayerResultOptions to manage this. If IncludeGeometry is set to False, geometry is not included in the recordset. This should increase performance in cases where feature geometry is large. You can also choose to densify or generalize the returned geometry by 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.

Field visibility and field aliases

QueryFeatureData2 honors field visibility set in the source map document. Field aliases, set in the source map document, are honored only when the connection to an ArcGIS Server is made using ArcGIS Server Client API (GISClient library ) or using SOAP/WSDL, but not honored for DCOM connection. However, the RecordSet does NOT honor any field formatting set in the source map.

Miscellaneous

In order to control the amount of information MapServer needs to process for a query, a maximum number of records can be set. This value is contained in the MaxRecordCount property on IMapServerInit2. The default value for this property is 500. If 600 features match a given query only the first 500 results will be returned. You will be unable to access the remaining 100 records. To be able to access these records the MaxRecordCount would need to be increased to 600. MaxRecordCount can also be changed by modifying the MaxRecordCount XML tag in the MapServer's configuration file.

There are two key differences between Find and QueryFeatureData2. The first is that Find can work on multiple layers while the query methods work with a single layer. The second is that Find only works with a search string. The query methods use a queryFilter as a parameter. This allows the query to be based on either an attribute filter (SQL expression) or a spatial filter.

Precedence. In case where both IQueryFilter::SubField and ILayerResultOption::IncludeGeometry is set, SubField takes precedence over IncludeGeometry. For example, when SubField = “Shape, FName, LName, Address” and IncludeGeometry = False, the output recordset will contain geometry as contained within the Shape field.

Product Availability

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

Specified by:
queryFeatureData2 in interface IMapServer2
Parameters:
mapName - The mapName (in)
pLayerDesciscription - A reference to a com.esri.arcgis.carto.ILayerDescription (in)
filter - A reference to a com.esri.arcgis.geodatabase.IQueryFilter (in)
options - A reference to a com.esri.arcgis.carto.IQueryResultOptions (in)
Returns:
A reference to a com.esri.arcgis.carto.IQueryResult
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getServiceConfigurationInfo

public IPropertySet getServiceConfigurationInfo()
                                         throws IOException,
                                                AutomationException
A set of name-value pairs for properties set for the MapServer Service Configuration Restrictions.

Remarks

Use ServiceConfigurationInfo to get restrictions set for a map service by the publisher that are stored in map service configuration file (.cfg). This property returns a PropertySet. This PropertySet includes: MaximumRecordCount, MaximumBufferCount, MaximumImageWidth and MaximumImageHeight and SupportedImageFormatTypes .

Image formats supported by optimized MapServices are “PNG32, PNG24, PNG, JPG, DIB, TIFF , EMF, PS, PDF, GIF, SVG, SVGZ” and by standard MapServices are “PNG24, PNG, JPG, DIB, TIFF, EMF, PS, PDF, GIF, SVG, SVGZ, AI”.

Product Availability

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

Specified by:
getServiceConfigurationInfo in interface IMapServer2
Returns:
A reference to a com.esri.arcgis.system.IPropertySet
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

isFixedScaleMap

public boolean isFixedScaleMap(String mapName)
                        throws IOException,
                               AutomationException
Indicates if a given map is a fixed scale map.

Remarks

Use this method to determine if a map service is cached. The term fixed scale map service and cached map service are used synonymously in the API. A fixed scale map service works with a cache of images that represent pre-rendered tiles for either the entire map service or for individual layers in the map service.

Product Availability

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

Specified by:
isFixedScaleMap in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
Returns:
The pIsFixedScaleMap
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

hasSingleFusedMapCache

public boolean hasSingleFusedMapCache(String mapName)
                               throws IOException,
                                      AutomationException
Indicates if a given map has a single fused map tile cache.

Remarks

Use this method to determine if a cached map service has a single fused map cache.

Product Availability

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

Specified by:
hasSingleFusedMapCache in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
Returns:
The pHasCache
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getTileCacheInfo

public ITileCacheInfo getTileCacheInfo(String mapName)
                                throws IOException,
                                       AutomationException
Gets the cache configuration for a given map.

Remarks

The TileCacheInfo object contains information on the tiling scheme for the cache. The tiling scheme includes the tiling origin, spatial reference, tile size in pixels and information on the Levels of Detail at which the service is cached.

LODInfos enumerate a LODInfo object which describes a scale and resoluton.

Using the tiling scheme information in the TileCacheInfo object the client can calculate the tiles that cover any rectangular extent in map space and then retrieve tiles either directly from the virtual directory, or from the tile handler or by making GetMapTile or GetLayerTile requests against the map service.

Product Availability

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

Specified by:
getTileCacheInfo in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
Returns:
A reference to a com.esri.arcgis.carto.ITileCacheInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getMapTile

public byte[] getMapTile(String mapName,
                         int level,
                         int row,
                         int column)
                  throws IOException,
                         AutomationException
Gets a tile for a given tile location from a given map.

Remarks

This call gets the specified tile from a map service that has a single fused cache. GetMapTile only returns a tile if the cache is generated using PNG format. When the cache format specified in the TileImageInfo is not PNG the client should use GetMapTileEx.

Product Availability

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

Specified by:
getMapTile in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
level - The level (in)
row - The row (in)
column - The column (in)
Returns:
An unsigned byte
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

hasLayerCache

public boolean hasLayerCache(String mapName,
                             int layerID)
                      throws IOException,
                             AutomationException
Indicates if a given layer has a single tile cache.

Remarks

Use this method to discover if a particular layer in a map service with a multi layer cache is cached or not. If IsFixedScaleMap is true and HasSingleFusedMapCache is false, then the map service has a multi layer cache that is made up of individual layer caches. Not all layers in such a map service need be cached.

Product Availability

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

Specified by:
hasLayerCache in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
Returns:
The pHasCache
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getLayerTile

public byte[] getLayerTile(String mapName,
                           int layerID,
                           int level,
                           int row,
                           int column)
                    throws IOException,
                           AutomationException
Gets a tile for a given tile location from a given layer.

Remarks

This call gets the specified tile from the specified layer for a map service that has a multi layer cache. GetLayerTile method only returns a tile if the cache is generated using PNG format. When the cache format specified in the TileImageInfo is not PNG the client should use GetLayerTileEx.

Product Availability

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

Specified by:
getLayerTile in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
level - The level (in)
row - The row (in)
column - The column (in)
Returns:
An unsigned byte
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getVirtualCacheDirectory

public String getVirtualCacheDirectory(String mapName,
                                       int layerID)
                                throws IOException,
                                       AutomationException
Gets the virtual cache directory for a given layer within a map.

Remarks

This call retrieves the virtual directory that hosts the cache tiles for this map service. Use -1 as the layerid in order to get the virtual cache directory for a map service that has a single fused cache. This is an optional property and may not always be present, for example, on a secure server or on an on demand server. If present then this is the preferred (most optimal) way for a client to retrieve tiles.

Product Availability

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

Specified by:
getVirtualCacheDirectory in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
Returns:
The pURL
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getCacheName

public String getCacheName(String mapName,
                           int layerID)
                    throws IOException,
                           AutomationException
Gets the cache name for a given layer within a map.

Product Availability

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

Specified by:
getCacheName in interface ITiledMapServer
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
Returns:
The pURL
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getMapTileEx

public byte[] getMapTileEx(String mapName,
                           int level,
                           int row,
                           int column,
                           int cacheFormat)
                    throws IOException,
                           AutomationException
Gets a tile for a given tile location from a given map.

Remarks

This call gets the specified tile from a map service that has a single fused cache.

Product Availability

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

Specified by:
getMapTileEx in interface ITiledMapServer2
Parameters:
mapName - The mapName (in)
level - The level (in)
row - The row (in)
column - The column (in)
cacheFormat - The cacheFormat (in)
Returns:
An unsigned byte
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getLayerTileEx

public byte[] getLayerTileEx(String mapName,
                             int layerID,
                             int level,
                             int row,
                             int column,
                             int cacheFormat)
                      throws IOException,
                             AutomationException
Gets a tile for a given tile location from a given layer.

Remarks

This call gets the specified tile from the specified layer for a map service that has a multi layer cache.

Product Availability

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

Specified by:
getLayerTileEx in interface ITiledMapServer2
Parameters:
mapName - The mapName (in)
layerID - The layerID (in)
level - The level (in)
row - The row (in)
column - The column (in)
cacheFormat - The cacheFormat (in)
Returns:
An unsigned byte
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getTileImageInfo

public ITileImageInfo getTileImageInfo(String mapName)
                                throws IOException,
                                       AutomationException
Gets the cache tile image information for a given map.

Remarks

GetTileIMageInfo returns information describing the image format for the cached tiles. TileImageInfo 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.

Product Availability

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

Specified by:
getTileImageInfo in interface ITiledMapServer2
Parameters:
mapName - The mapName (in)
Returns:
A reference to a com.esri.arcgis.carto.ITileImageInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getCacheDescriptionInfo

public ICacheDescriptionInfo getCacheDescriptionInfo(String mapName)
                                              throws IOException,
                                                     AutomationException
Gets the cache description information for a given map.

Remarks

GetCacheDescriptionInfo returns information on a cached map service in one call including its cache type, its tiling scheme (TileCacheInfo), image information (TileImageInfo) 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.

Product Availability

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

Specified by:
getCacheDescriptionInfo in interface ITiledMapServer2
Parameters:
mapName - The mapName (in)
Returns:
A reference to a com.esri.arcgis.carto.ICacheDescriptionInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.

getCacheControlInfo

public ICacheControlInfo getCacheControlInfo(String mapName)
                                      throws IOException,
                                             AutomationException
Gets the cache description information for a given map.

Remarks

Returns cache control information that allows clients to discover information such as if client caching is allowed.

Product Availability

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

Specified by:
getCacheControlInfo in interface ITiledMapServer2
Parameters:
mapName - The mapName (in)
Returns:
A reference to a com.esri.arcgis.carto.ICacheControlInfo
Throws:
IOException - If there are interop problems.
AutomationException - If the ArcObject component throws an exception.