Guidelines to creating an ArcGIS Image Server client application

Most of you require visual access to imagery provided as an image service. The following is an overview of the typical workflow:

The client application adds a button or a command to establish a connection.
The Add Image Server GUI is displayed to enable users to select a server and view the available image services and their metadata.
The user needs to select one or more image services to be loaded.
The image is displayed for the current view.
The user can continue panning and zooming around the application with new imagery being requested and displayed from the server.
The user can open a dialog of image service properties where changes to properties of the service can be made, such as subsampling or compression method for transmission. Additionally, metadata about the image service, image, and the source data is provided.
The user can export a part of an image to a local image file.
The current state and properties of the current image service can be saved to an Image Service Reference (.ISRef) file that can be loaded directly into other applications that support ArcGIS Image Server.

There is a range of different applications that require access to imagery. Each application may have different aspects that need to be considered.

One of the key factors that differentiate applications accessing imagery is how the imagery is requested and displayed. Typical options are:

Paint imagery to a window which is often called a screen scrape
-The imagery is requested for the specified window and painted to fit the window.
-Typically such an application specifies the minimum and maximum number of columns and rows and the returned image is displayed.
-Such applications require a complete image window to be returned even if the source does not fully cover the window or the client has only performed a slight pan. Therefore in theory requires only an additional section of imagery.
-In ArcGIS Image Server, the quality of imagery is often better because there is no double resampling. The screen coordinates are transmitted to the image server, which processes the imagery. Therefore, only a single sampling of the image occurs from the base imagery to the screen image.
Access georeferenced image file (on disk or memory)
-The imagery required to cover the window (and possibly a small border) is requested.
-The image is obtained.
-The image is georeferenced (possibly via GeoTIF, or by defining affine parameters).
-Some applications can have partial images returned.
Create a cache of tiles
-Application has its own caching method.
-Need to make requests for tiles of imagery.
-Optimization of such requests need to be considered.
Access to Raw pixels
-Typical applications may be for stereo display or detailed analysis.
-Applications requires metadata about the imagery and access to the raw pixel values. This is not supported in ArcGIS Image Server 9.2.
Access to large extents of imagery
-Typical for high-resolution, large format plotting.
-Application may need to consider optimized access so that the client memory requirements are not excessive.

Some applications may employ multiple methods.

When designing such an interface the following points should be considered as part of the design process.

The client application should adhere to the terminology and interface standards of the host application and should add as few menu/buttons as possible. It is important that addition of ArcGIS Image Server support be as unobtrusive and automated as possible, to not disturb the workflow of the host application.
There are often multiple ways a user can add a service to a client and control the imagery.
-Using a GUI
-Using the command line
-By programming
A user may want to add multiple services to the application and be able to turn different layers/themes/references on/off
How should transparency and background colors be handled or controlled?
Does the application enable the addition of different image formats? If so, consider adding an .ISRef as an image format.
Determine how the image service will be associated with the host application. If the application is closed or re-opened or a file closed and re-opened, how are the links stored. It may be possible to keep a link with the file, otherwise it may need to reference an external file, such as the .ISRef.
How should the projections and spatial reference systems be handled? How can they be defined and stored? Can they be converted to a Well-Known Text (WKT) and what transformation methods should be used?
Should the user be able to change the spatial reference of the image service or should it be controlled only by the client application?
Does the application allow the rotation of the display? How will this affect the requested imagery and the display of the imagery? Affine transformation parameters may be added as part of the projection specification to handle this.
What coordinates are accessible after reprojection and rotation?
How should the following exceptions be handled?
-No image service available
-Image requested is out of range
-Image requested is out of extent
-Error occurs prior to display
What triggers a refresh of the display? How can these events be captured?
What is the standard method for temporarily turning an image on and off?
How should the geographic extents of the application be handled when an image service is added? Should the new extents include the extents of the image? What should happen if the user zooms to extent?
When a user wishes to export an image, what are the standard extents to be passed? (Such as window extent, theme extents, or extent of current graphics.)
How should the Properties dialog box be opened?
How should features, such as Export or SaveAs (.ISRef), be handled from the GUI side? (The client DLL can be configured to include them in the Properties dialog box, otherwise they can be explicitly added)
How can imagery be added to the display? Wherever possible, direct drawing of the imagery from memory to the display is preferred, but some applications can only add rasters stored on disk.
What pixel formats are supported either for direct display or reading from file:
-Number of bands
-Pixel type (8bit, 16bit, 32bit)
If reading from file:
-Which format compression is allowed/optimal?
-What formats of images are supported?
-How should the image be displayed? Can the image be replaced (that is, not locked)?
How is plotting and printing handled? Consider both large preview and the plot request.
Can the application handle modal and non-modal dialog boxes? Can Apply versus OK be supported?