Using Projection Elements

Introduction

Features on a map refer to the actual locations of the objects they represent in the real world. The positions of objects on the earth's spherical surface are measured in degrees of latitude and longitude, also known as geographic coordinates. Though latitude and longitude can locate exact positions on the surface of the earth, they are not uniform units of measure; only along the equator does the distance represented by one degree of longitude approximate the distance represented by one degree of latitude. To overcome measurement difficulties, data is often transformed from the three-dimensional geographic coordinate system to the two-dimensional planar surface in a projected coordinate system. Projected coordinate systems describe the distance from an origin (0,0) along two separate axes: a horizontal x-axis representing east-west and a vertical y-axis representing north-south.

Because the earth is round and maps are flat, getting information from the curved surface to a flat one involves a mathematical formula call a map projection. A map projection transforms latitude and logitude to x,y coordinates in a projected coordinate system.
Locations are expressed as latitude and longitude on the globe and as x,y coordinates on a map.
 
This process of flattening the earth causes distortions in one or more of the following spatial properties: distance, area, shape, and direction. No projection can preserve all these properties, and as a result, all flat maps are distorted to some degree. Fortunately, you can choose from many different map projections. Each is distinguished by its suitability for representing a particular portion and amount of the earth's surface and by its ability to preserve distance, area, shape, or direction. Some map projections minimize distortion in one property at the expense of another, while others strive to balance the overall distortion. As a mapmaker, you can decide which properties are most important and choose a projection that suits your needs.
Displaying the world using the Sinusoidal projection (left) and the Robinson projection (right).
 

Reasons for using a projected coordinate system

Choosing a map projection

Here are a few things to consider when choosing a projection: Answering these questions will determine what map projection and thus what projected coordinate system you'll want to use to display your data.

Map projections can be generally classified according to what spatial attribute they preserve:

Projection Elements in ArcIMS

Projections in ArcIMS are handled by the ArcIMS Spatial Server. Three projection elements are used to retrieve data in the correct projected coordinate system:
With ArcIMS, the term coordinate system, which includes both geographic and projected coordinate systems, is used to describe the information about the projection, as well as other specifics such as datum, units, and meridians.

Each projection element defines a coordinate system by either an ID or a definition string. For a complete list of supported IDs and definition strings, see:  

COORDSYS

COORDSYS defines the projection metadata for a data layer. It does not reproject the data to another coordinate system; it merely states what projection that layer is in. COORDSYS can be used with: If no *.prj file or spatial references table or COORDSYS is present, the layer is not projected. If a layer does not project as expected, double-check whether the layer has a *.prj file or spatial reference table or COORDSYS. For ArcMap Image Services, the coordinate system for each layer is handled in the ArcMap document (*.mxd or *.pmf).

FEATURECOORDSYS

FEATURECOORDSYS is used to specify a common coordinate system in an ArcIMS service to which each layer should be transformed. In an ArcIMS service, FEATURECOORDSYS represents the overall projection and can be thought of as the default coordinate system. This coordinate system can be different than the coordinate system of any of the layers.

Requests with no projection elements made to an ArcIMS service will receive data in the default coordinate system of the service. A request can override the service FEATURECOORDSYS with its own FEATURECOORDSYS. For example, if a service is in Robinson and a request includes a FEATURECOORDSYS of Mollweide, then the ArcIMS Spatial Server returns the data in Mollweide.

When FEATURECOORDSYS is present, the map units are calculated automatically by the ArcIMS Spatial Server. If MAPUNITS is present, it is ignored. Having the correct map units is important to make sure scale dependencies in LAYER, SCALEDEPENDENTRENDERER, and OBJECT are correctly calculated.

FILTERCOORDSYS

FILTERCOORDSYS is used to specify the coordinate system of the requesting client. Much like COORDSYS, FILTERCOORDSYS can be thought of as metadata, this time for the client. In the request, coordinates in the extents and spatial filters are in the coordinate system of the FILTERCOORDSYS.

FILTERCOORDSYS must be included in a map configuration file if FEATURECOORDSYS is present. As with requests, FILTERCOORDSYS represents the coordinates in the extents and spatial filters of the map configuration file. If these coordinates are different than the overall FEATURECOORDSYS, then FILTERCOORDSYS will have a different ID or definition string.

Using the Projection Elements

This next section discusses different scenarios for using the projection elements. One important note: the ArcIMS clients do not support projections. All projections must be handled by the ArcIMS Spatial Server. In addition, when using the ArcIMS viewers, FILTERCOORDSYS and FEATURECOORDSYS must have the same ID. The ArcIMS HTML Viewer can be customized to accommodate different IDs for FEATURECOORDSYS and FILTERCOORDSYS. The ArcIMS Java Viewers cannot be customized this way.

Map configuration file without FILTERCOORDSYS and FEATURECOORDSYS

The example below shows a map configuration file that does not use FILTERCOORDSYS or FEATURECOORDSYS but does use COORDSYS for the layers. The two layers are both world shapefile layers. One is in World Mollweide (id="54009") and the other is in World Robinson (id="54030"). Remember, if a shapefile has a *.prj file associated with it, COORDSYS does not need to be included. If neither a *.prj file nor COORDSYS is present, the layer is not projected.
Using COORDSYS in a map configuration file:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
    </ENVIRONMENT>
    <MAP>
      <PROPERTIES>
        <ENVELOPE minx="-14628440.851850007" miny="-9020047.848073646" maxx="15705351.712200116" maxy="8748562.401522137" name="Initial_Extent" />
        <MAPUNITS units="meters" />
      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-12" directory="c:\data" />
      </WORKSPACES>
      <LAYER type="featureclass" name="Ocean" visible="true" id="22">
        <DATASET name="WORLD30" type="polygon" workspace="shp_ws-12" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL fillcolor="240,255,255" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Robinson" visible="true" id="0">
        <DATASET name="cntry94_Robinson" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54030" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,102" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Mollweide" visible="true" id="1">
        <DATASET name="Cntry94_Mollweide" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54009" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltransparency="0.0" boundarywidth="3" boundarycolor="27,27,127" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

 
To view a map, a GET_IMAGE request can be made to this Image Service. The following request includes no projection elements.
GET_IMAGE request with no projection elements:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
In the returned image, the two layers do not overlay correctly because they are not in the same coordinate system. Remember, the ArcIMS viewers cannot project data.
 
In the next GET_IMAGE request, FEATURECOORDSYS and FILTERCOORDSYS are included and are set to World Sinusoidal, which has an id="54008".
GET_IMAGE request using FILTERCOORDSYS and FEATURECOORDSYS:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
        <FILTERCOORDSYS id="54008" />
        <FEATURECOORDSYS id="54008" />

      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
In the returned image, the two layers are aligned in the Sinusoidal projection.
 
The last GET_IMAGE example worked correctly because the two layers have coordinate systems with similar minimum and maximum X and Y extents. In reality, an ENVELOPE is normally included in the request. Coordinates used in ENVELOPE and inside SPATIALFILTER should be in the coordinate system of FILTERCOORDSYS. In the next example, an ENVELOPE is included in the request. The map units are calculated by the ArcIMS Spatial Server based on the ID selected for FEATURECOORDSYS. Hence, MAPUNITS is not required in requests.
GET_IMAGE request with ENVELOPE:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
        <ENVELOPE minx="-14628440.851850007" miny="-9020047.848073646" maxx="15705351.712200116" maxy="8748562.401522137" />
        <FILTERCOORDSYS id="54008" />
        <FEATURECOORDSYS id="54008" />
      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
With the above request, the returned ENVELOPE is guaranteed to be correct.
IMAGE response with ENVELOPE:
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <IMAGE>
      <ENVELOPE minx="-14628440.85185" miny="-11510914.9347945" maxx="15705351.7122001" maxy="11239429.488243" />

      <OUTPUT file="C:\ArcIMS\output\proj_paper_MYCOMPUTER79217360.jpg" url="http://mycomputer.esri.com/output/proj_paper_MYCOMPUTER79217360.jpg" />
    </IMAGE>
  </RESPONSE>
</ARCXML>
 
The returned image is the same as the previous image.
 

Map configuration file with FEATURECOORDSYS and FILTERCOORDSYS

FILTERCOORDSYS and FEATURECOORDSYS can be included in the map configuration file as shown in the next example. For both elements, the coordinate system ID is set to World Sinusoidal (id="54008"). Although MAPUNITS is included, it is ignored when FEATURECOORDSYS is present.
Using FILTERCOORDSYS AND FEATURECOORDSYS in a map configuration file:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
    </ENVIRONMENT>
    <MAP>
      <PROPERTIES>
        <ENVELOPE minx="-14628440.851850007" miny="-9020047.848073646" maxx="15705351.712200116" maxy="8748562.401522137" name="Initial_Extent" />
        <MAPUNITS units="meters" />
        <FEATURECOORDSYS id="54008" />
        <FILTERCOORDSYS id="54008" />

      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-12" directory="c:\data" />
      </WORKSPACES>
      <LAYER type="featureclass" name="Ocean" visible="true" id="22">
        <DATASET name="WORLD30" type="polygon" workspace="shp_ws-12" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL fillcolor="240,255,255" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Robinson" visible="true" id="0">
        <DATASET name="cntry94_Robinson" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54030" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,102" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Mollweide" visible="true" id="1">
        <DATASET name="Cntry94_Mollweide" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54009" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltransparency="0.0" boundarywidth="3" boundarycolor="27,27,127" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

 
Once again, a GET_IMAGE request that includes no projection elements can be made to the service.
GET_IMAGE request with no projection elements:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
This time in the returned image, the two layers overlay in the Sinusoidal projection, the default from the service.

 
Regardless of the coordinate system of the service, a request can always include projection elements that override the projection elements in the service. If you want to know the projection of a service you are accessing, you can send a GET_SERVICE_INFO request to find out which FEATURECOORDSYS and FILTERCOORDSYS are in use.
GET_SERVICE_INFO request:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_SERVICE_INFO fields="false" envelope="false" renderer="false" extensions="false" />
  </REQUEST>
</ARCXML>

 
The response includes FILTERCOORDSYS and FEATURECOORDSYS if they are present in the ArcIMS service.
SERVICEINFO response:
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <SERVICEINFO>
      <ENVIRONMENT>
        <LOCALE language="en" country="US" />
        <UIFONT name="Arial" color="0,0,0" size="12" style="regular" />
        <SEPARATORS cs=" " ts=";"/>
        <IMAGELIMIT pixelcount="2250000"/>
      </ENVIRONMENT>
      <PROPERTIES>
        <FEATURECOORDSYS id="54008" />
        <FILTERCOORDSYS id="54008" />

        <ENVELOPE minx="-14628440.85185" miny="-9020047.84807364" maxx="15705351.7122001" maxy="8748562.40152213" name="Initial_Extent" />
        <MAPUNITS units="meters" />
      </PROPERTIES>
      <LAYERINFO type="featureclass" visible="true" name="Ocean" id="22">
        <FCLASS type="polygon"></FCLASS>
      </LAYERINFO>
      <LAYERINFO type="featureclass" visible="true" name="Robinson" id="0">
        <FCLASS type="polygon"></FCLASS>
      </LAYERINFO>
      <LAYERINFO type="featureclass" visible="true" name="Mollweide" id="1">
        <FCLASS type="polygon"></FCLASS>
      </LAYERINFO>
    </SERVICEINFO>
  </RESPONSE>
</ARCXML>
 
Once you know the projection information of an ArcIMS service, you can override FEATURECOORDSYS and FILTERCOORDSYS in a request if necessary. In the next GET_IMAGE request, FEATURECOORDSYS and FILTERCOORDSYS are both set to geographic coordinates with an id="4326". Since the client is in geographic coordinates (represented by FILTERCOORDSYS), the ENVELOPE needs to be in geographic coordinates.
GET_IMAGE request using FILTERCOORDSYS and FEATURECOORDSYS:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
        <ENVELOPE minx="-180" miny="-90" maxx="180" maxy="90" />
        <FILTERCOORDSYS id="4326" />
        <FEATURECOORDSYS id="4326" />

      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
In the returned image, the two layers are aligned in geographic coordinates.
 

Changing projections in a customized ArcIMS HTML Viewer

Assume now that your ArcIMS HTML Viewer is currently in geographic coordinates ("4326"), but you want a map returned in Robinson ("54030"). In this scenario, FILTERCOORDSYS, the current projection of the client, is set to id="4326". Coordinates in the request, such as those in ENVELOPE, should all be in geographic coordinates.

FEATURECOORDSYS defines the coordinate system of the map returned to the client. In this case, FEATURECOORDSYS is set to id="54030".
GET_IMAGE request using FILTERCOORDSYS and FEATURECOORDSYS with ENVELOPE in decimal degrees:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_IMAGE>
      <PROPERTIES>
        <ENVELOPE minx="-180" miny="-90" maxx="180" maxy="90" />
        <FILTERCOORDSYS id="4326" />
        <FEATURECOORDSYS id="54030" />

      </PROPERTIES>
    </GET_IMAGE>
  </REQUEST>
</ARCXML>
 
In the response, the ENVELOPE is in Robinson coordinates.
IMAGE response with ENVELOPE in Robinson coordinates:
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <IMAGE>
      <ENVELOPE minx="-16986727.8564406" miny="-12740045.8923304" maxx="16986727.8564406" maxy="12740045.8923304" />

      <OUTPUT file="C:\ArcIMS\output\proj_paper_MYCOMPUTER79217360.jpg" url="http://mycomputer.esri.com/output/proj_paper_MYCOMPUTER79217360.jpg" />
    </IMAGE>
  </RESPONSE>
</ARCXML>
 
In the returned image, the two layers are now in Robinson.

 

Defining a Coordinate System

A coordinate system can be defined in two ways: using a predefined coordinate system ID or a coordinate system definition string. The predefined IDs are a quick way to reference a coordinate system by using a single reference number. The coordinate system definition string uses a string to describe all parameters for a projection. The advantage of using the definition string is that parameters in the string can be modified.

For a complete list of supported IDs and definition strings, see: As an example, the coordinate system ID for World Robinson is 54030.

The coordinate system definition string for World Robinson is:

World Robinson,54030
PROJCS["World_Robinson",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Robinson"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",0],UNIT["Meter",1]]

In the examples so far, only the IDs have been used. These IDs can be replaced by the definition string. In the next example, an Image Service includes the definition string for World Robinson for FEATURECOORDSYS and FILTERCOORDSYS. Note that the quotation marks (") in the definition string must be escaped with &quot;.

PROJCS[&quot;World_Robinson&quot;,GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degree&quot;,0.017453292519943295]],PROJECTION[&quot;Robinson&quot;],PARAMETER[&quot;False_Easting&quot;,0],PARAMETER[&quot;False_Northing&quot;,0],PARAMETER[&quot;Central_Meridian&quot;,0],UNIT[&quot;Meter&quot;,1]]
Using a projection definition string for FILTERCOORDSYS AND FEATURECOORDSYS in a map configuration file:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
    </ENVIRONMENT>
    <MAP>
      <PROPERTIES>
        <ENVELOPE minx="-14628440.851850007" miny="-9020047.848073646" maxx="15705351.712200116" maxy="8748562.401522137" name="Initial_Extent" />
        <MAPUNITS units="meters" />
        <FEATURECOORDSYS string="PROJCS[&quot;World_Robinson&quot;,GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degree&quot;,0.017453292519943295]],PROJECTION[&quot;Robinson&quot;],PARAMETER[&quot;False_Easting&quot;,0],PARAMETER[&quot;False_Northing&quot;,0],PARAMETER[&quot;Central_Meridian&quot;,0],UNIT[&quot;Meter&quot;,1]]" />
        <FILTERCOORDSYS string="PROJCS[&quot;World_Robinson&quot;,GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degree&quot;,0.017453292519943295]],PROJECTION[&quot;Robinson&quot;],PARAMETER[&quot;False_Easting&quot;,0],PARAMETER[&quot;False_Northing&quot;,0],PARAMETER[&quot;Central_Meridian&quot;,0],UNIT[&quot;Meter&quot;,1]]" />

      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-12" directory="c:\data" />
      </WORKSPACES>
      <LAYER type="featureclass" name="Ocean" visible="true" id="22">
        <DATASET name="WORLD30" type="polygon" workspace="shp_ws-12" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL fillcolor="240,255,255" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Robinson" visible="true" id="0">
        <DATASET name="cntry94_Robinson" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54030" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,102" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Mollweide" visible="true" id="1">
        <DATASET name="Cntry94_Mollweide" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54009" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltransparency="0.0" boundarywidth="3" boundarycolor="27,27,127" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

 
If a GET_IMAGE request is made to this service, the returned image includes the two layers in Robinson.
 
In the next example, an attribute in the definition string is changed. The central meridian for the FEATURECOORDSYS and FILTERCOORDSYS definition strings has been changed from 0 to 180.
Changing the central meridian in a projection definition string:
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
    </ENVIRONMENT>
    <MAP>
      <PROPERTIES>
        <ENVELOPE minx="-14628440.851850007" miny="-9020047.848073646" maxx="15705351.712200116" maxy="8748562.401522137" name="Initial_Extent" />
        <MAPUNITS units="meters" />
        <FEATURECOORDSYS string="PROJCS[&quot;World_Robinson&quot;,GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degree&quot;,0.017453292519943295]],PROJECTION[&quot;Robinson&quot;],PARAMETER[&quot;False_Easting&quot;,0],PARAMETER[&quot;False_Northing&quot;,0],PARAMETER[&quot;Central_Meridian&quot;,180],UNIT[&quot;Meter&quot;,1]]" />
        <FILTERCOORDSYS string="PROJCS[&quot;World_Robinson&quot;,GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degree&quot;,0.017453292519943295]],PROJECTION[&quot;Robinson&quot;],PARAMETER[&quot;False_Easting&quot;,0],PARAMETER[&quot;False_Northing&quot;,0],PARAMETER[&quot;Central_Meridian&quot;,180],UNIT[&quot;Meter&quot;,1]]" />
      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-12" directory="c:\data" />
      </WORKSPACES>
      <LAYER type="featureclass" name="Ocean" visible="true" id="22">
        <DATASET name="WORLD30" type="polygon" workspace="shp_ws-12" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL fillcolor="240,255,255" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Robinson" visible="true" id="0">
        <DATASET name="cntry94_Robinson" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54030" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,102" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Mollweide" visible="true" id="1">
        <DATASET name="Cntry94_Mollweide" type="polygon" workspace="shp_ws-12" />
        <COORDSYS id="54009" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltransparency="0.0" boundarywidth="3" boundarycolor="27,27,127" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

 
If a GET_IMAGE request is made to this service, the returned image includes the two layers in Robinson centered on the Pacific Ocean.
 
Although the above examples with definition strings use map configuration files, definition strings can also be used in requests.

Using Datum Transformations

A datum is a reference frame defined by a spheroid and the spheroid’s position relative to the center of the earth. A datum uses latitude and longitude or geographic coordinate systems to define the locations of points on the surface of a spheroid.

A datum transformation is a method that converts data between two geographic coordinate systems. Common geographic coordinate systems are WGS 1984 and NAD 1983. Only datum transformations to and from WGS 1984 are supported.

What happens behind the scenes during a datum transformation is a four-step process. In the following figure, the desired result is to transform a layer from State Plane coordinates in NAD 1927 to UTM coordinates in NAD 1983. All datum transformations take place to and from WGS 1984, so there are some intermediate steps.
 
The attributes datumtransformid and datumtransformstring are used with the projection elements when datum transformation information needs to be included.
Transforming a layer in NAD 1927 (datumtransformid="8070") State Plane coordinates (id="26745") to NAD 1983 (datumtransformid="8088") UTM coordinates (id="26911"):
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
      <SCREEN dpi="96" />
    </ENVIRONMENT>
    <MAP>
      <PROPERTIES>
        <ENVELOPE minx="51508.9214" miny="3429418.0119" maxx="948491.0785" maxy="4102154.6297" name="Initial_Extent" name="Initial_Extent" />
        <MAPUNITS units="feet" />
        <FEATURECOORDSYS id="26911" datumtransformid="8088" />
        <FILTERCOORDSYS id="26911" datumtransformid="8088" />

      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-2" directory="<path to data>" />
      </WORKSPACES>
      <LAYER type="featureclass" name="California" visible="true" id="1">
        <DATASET name="calif" type="polygon" workspace="shp_ws-2" />
        <COORDSYS id="26745" datumtransformid="8070" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL color="0,0,255" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

 
The complete list of supported datum transformations is included in the Datum Transformation Listing.

Data Densification

The process of data densification adds points to a layer before the layer is projected. When data is projected, the line geometry changes. For example, a square in one projection may be trapezoidal in another projection. In many cases, the number of points defining the geometry in the original layer is not enough to describe the geometry correctly in the projected layer. In the following figure, without densification, the square in Projection 1 is projected to the trapezoid as seen with Projection 2. When the data for Projection 1 is densified, the geometry for Projection 2 shows more detail.
 
For a layer in association with COORDSYS, DENSIFY can be used to define how much data should be densified before a layer is projected. If you find that features are missing from a layer in a requested image, usually around the periphery, try using DENSIFY on the layer. A word of caution about DENSIFY: if the tolerance value is too small, the ArcIMS Spatial Server can slow down considerably. It is better to start with a large number for tolerance. A guideline is to start with a value about 20 to 30 percent of the distance between the minimum and maximum x-coordinates of the current map extent.

Processing Time

Whenever the projection elements are used, the time to process a request on the ArcIMS Spatial Server can take considerably longer than when no projection elements are used. This is important when considering performance issues. If FILTERCOORDSYS and FEATURECOORDSYS are used, the amount of time to transform data can be an order of magnitude more than not using the elements depending on the complexity of the data. When using densification, it takes even longer to process the data depending on how much each layer has been densified. Ideally, if you have control over the data, all data and the service should be in the same projection and datum to minimize the need for using the projection elements.