ArcGIS Server Banner

Input and output data types

Input and output data types

Release 9.3 E-mail This TopicPrintable VersionGive Us feedback

As described in Key concepts for geoprocessing services, you cannot use certain data types as input and output parameters.

NOTE: Since processes within your published model or script execute on the server where all data types are available, you can use any data type for model or script processes, as illustrated below. Only the input and output parameter data types are limited. Any type of data that can be accessed by the server can be used by your model or script processes.

Input and output data types versus model processes

There are four levels of data type support:

Models and scripts that work on ArcGIS Desktop may have to be modified (to have only supported input and output data types) before you can publish them to ArcGIS Server.

Input data types

The following table summarizes key input parameter data types for the three clients.


Input parameter data type Supported on ArcGIS Desktop clients? Supported on ArcGIS Explorer client? Supported on web application clients?
Feature Set Yes Yes Yes
Record Set Yes Yes Yes
Feature Class No (but Feature Class input is supported indirectly with the Feature Set data type) No No
Table No (but Table input is supported indirectly with the Record Set data type) No No
Raster Yes No No
Standard types (such as Long, Double, Boolean, Date, String) and Linear Unit (for example, "1,000 meters") Yes Yes Yes
File (such as a .zip or .xml file) Yes Yes Yes
Layer (any type of layer; for example, Feature Layer, Raster Layer, Network Analyst Layer) Only those layers found in a result map service or source map document Only those layers found in a result map service or source map document Only those layers found in a result map service or source map document

For any input data type not in the above list, one of two things will occur when you publish your model or script.

Feature classes and tables

Feature Class and Table data types are not supported as input parameters because they rely on large software libraries that cannot be installed with lightweight clients such as ArcGIS Explorer and Web applications. Because of this, geoprocessing contains two lightweight data types, Feature Sets and Record Sets, which you can substitute for Feature Class and Table data types.

Feature Sets allow all Web clients to interactively digitize features on a map. In ArcGIS Desktop, the Feature Set data type additionally allows you to input an existing feature class, as illustrated below. Feature classes are allowed on ArcGIS Desktop because the required software libraries are available (that is, it's a heavyweight client). Similarly, Record Sets allow all clients to interactively create table records, and in ArcGIS Desktop, you can additionally specify an existing table.

Feature and Record sets accept a feature class

Learn more about Feature and Record Sets.

Raster datasets

Geoprocessing services that have Raster dataset inputs only work on ArcGIS Desktop clients. On an ArcGIS Explorer client, the service cannot be added as a task. In Web applications, the service will return an error.

Output data types

The following table summarizes key output parameter data types for the three clients. Following this table are notes about each data type.


Output parameter data type Supported on ArcGIS Desktop clients? Supported on ArcGIS Explorer client? Supported on Web application clients?
Feature Class Yes Yes Yes
Feature Layer Yes Yes Yes
Raster Yes No—can only be displayed using a result map service No—can only be displayed using a result map service
Raster Layer Yes No No
Geodataset (other than feature class or raster) No—can only be displayed using a result map service No—can only be displayed using a result map service No—can only be displayed using a result map service
Table Yes No—services that have a table data type as an output parameter will not be shown in the list of available tasks Yes
Standard types (such as Long, Double, Boolean, Date, String) and Linear Unit (for example, "1,000 meters") Yes—viewed in the service result found in the Results tab of the ArcToolbox window Yes—viewed in the Task Result Yes
File Yes Yes Yes

For any data type not in the above list, one of two things will occur when you publish your model or script.

NOTE: If you are using a result map service to draw your output data, your task can output any geodataset. The result map service will draw the geodataset.

Feature Class

The Feature Class data type is supported as an output data type. When you publish a model or script, your tool is scanned; if an output Feature Class is found, it is turned into an output Feature Set and this Feature Set is transported back to the client. This transformation occurs behind the scenes; your model or script is unchanged. It only occurs with output feature classes because the transformation occurs on the server, which has all the necessary software libraries needed to perform the transformation. So, technically speaking, feature classes are not supported for output; they are allowed because ArcGIS Server knows how to transform them to the supported Feature Set data type.

Feature layers

A feature layer references a feature class on disk and supports a set of selected features that result from an attribute or spatial query. You create feature layers using the Make Feature Layer tool and perform queries using the Select Layer By Attribute and Select Layer By Location tools. It is not uncommon for geoprocessing tasks to output feature layers containing selections.

When ArcGIS Server encounters an output feature layer, the selected features are converted to a feature class and only the selected features are transported back to the client.

NOTE: Output feature layers do not work in result map services.

When you use a result map service, it's important to realize that there are two services—the geoprocessing service and the result map service. These two services execute independently of each other. When the task executes, ArcGIS Server executes the geoprocessing task first and then executes the result map service to draw the output of the geoprocessing service. Feature layers are transient objects, held in_memory for the duration of task execution. Once the task completes these in_memory feature layers disappear. If the result map service references the same feature class found in the layer, all information about the selected features (that is, the result of your task) will be gone when the map service draws, and the result map service draws all features. If you need a map service to draw selected features in a layer, you must first save these selected features to a feature class using the Copy Features tool, using your feature layer as input. Copy Features will only copy the selected features in the layer. You can then draw the copied features with a result map service.

Raster datasets

Raster datasets are supported as output only on ArcGIS Desktop clients.

Raster layers

Like feature layers, you can output a raster layer only on ArcGIS Desktop clients. When ArcGIS Server encounters an output raster layer, the raster is transported back to the client. Output raster layers do not work in result map services for the same reason that feature layers do not work, as noted above.

Other layers

Only feature layers and raster layers are supported for output (and, as mentioned, raster layers are only supported for ArcGIS Desktop clients). All other kinds of layers, such as NetCDF layers, Network Analysis layers, and Geostatistic Analysis layers, are not supported.

Other geodatasets

Any output geodataset data type besides Feature Class or Raster (such as TIN or Terrain) cannot have its data transferred back to the client. However, your geoprocessing service can have a result map service to display the data, and the result of your geoprocessing service will be a map-service layer that can be drawn on any client.

Table

The Table data type, like the Feature Class data type, is also supported; it is transformed into a Record Set for transport back to the client.

Strategies for unsupported data types

If the model or script you want to publish has unsupported input or output data types, or the data type is converted to a string, you must modify your model or script so that it only uses the supported input and output data types. There are two general strategies you can employ:

Using the string representation

Every data type has a string representation, as discussed in data types for geoprocessing tool parameters.

If an input to your model is one of the data types that is converted to a string when published to ArcGIS Server, you can modify your model to accept string input and then convert the string to your desired data type. The following demonstration shows you how to do this conversion. This example first shows converting a data type's value to a string, which is the opposite of what you need to do for your model but demonstrates an important concept: all data types have a string representation. The second part of the example shows how to convert a string to a data type value—the method you would use in your service.

The data type used for demonstration is Areal Unit.

The first part of this demonstration determines the string format of an areal unit.

  1. Create a new model.
  2. Create a variable with an Areal Unit data type and rename it "Input AU".
  3. Add the Calculate Value tool.
  4. Double-click Calculate Value to open its dialog box. For the Expression parameter, enter "%Input AU%". This instructs Calculate Value to read the contents of the variable Input AU.
  5. Learn more about variable substitution.

    For the Data type parameter, choose String, as illustrated below.

    Determing the string format of a data type

  6. Optionally, you can make the Input AU variable a precondition to Calculate Value. A precondition means that the variable must contain a value before the tool executes. Precondition connectors are shown as dashed lines, as illustrated below.
  7. Learn more about setting preconditions.

  8. Double-click the Input AU variable and set its value to 1,000 Square Meters.
  9. Click OK.
  10. Run the model. Double-click output_value and examine its value. The value is the string representation of the areal unit, as illustrated below. Note how the string representation does not contain a space between "square" and "meters."
  11. Determining the string format of 1000 square meters

As demonstrated above, all data type values have a string representation. You can use Calculate Value to view the string representation of any data type. For example, you could input a Spatial Reference variable into Calculate Value to view its string representation.

Learn more about the string representation of a data type value.

The following steps show you how to convert a string variable into another data type. The steps are the same as above except the input variable is a String and the output is an Areal Unit.

  1. Create a new model.
  2. Create a variable with a String data type and rename it "Input AU String".
  3. Add the Calculate Value tool.
  4. Double-click Calculate Value to open its dialog box. For the Expression parameter, enter "%Input AU String%". This instructs Calculate Value to read the contents of the variable Input AU String.
  5. Learn more about variable substitution.

    For the Data type parameter, choose Areal Unit, as illustrated below.

    Converting a String to Areal Unit

  6. Optionally, you can make the Input AU String variable a precondition to Calculate Value. A precondition means that the variable must contain a value before the tool executes. Precondition connectors are shown as dashed lines, as illustrated below.
  7. Learn more about setting preconditions.

  8. Double-click the Input AU String variable and set its value to "1000 squaremeters".
  9. Click OK.
  10. Run the model. Double-click output_value and examine its value. The value is Areal Unit, as illustrated below. The data type of output_value is actually Any value, not Areal Unit. A data type of Any value is a generic data type that can be connected to any tool parameter.
  11. Converting a String to Areal Unit

(This conversion technique is also demonstrated in the Select Layer By Area model found in GP Service example: Selecting data.)

The illustration below shows a model that uses the Simplify Building tool, which takes an areal unit as input. Because Areal Unit is not a supported input parameter data type for geoprocessing services, the model's input parameter (Minimum Area) is a string that is converted to an areal unit using the above method. The variable output_value is connected to the Minimum Area parameter of the Simplify Building using ModelBuilder's Add Connection tool Add Connection.

Learn more about connecting variables to tools.

Using calculate value in a geoprocessing service

Using this technique requires that the user of your tool enter the correct string. For example, if "1000 square meters" (instead of "1000 squaremeters") is input to Calculate Value, the resulting Areal Unit will be empty. Capitalization does not matter—that is, SquareMETERS and squareMeters are equivalent.

If you want to provide more error checking in the process of converting a string to a data type, you can write a script tool to do data type conversion and add error checking to the script. The Python code below shows the basic idea.

import arcgisscripting

gp = arcgisscripting.create()

# Get the string and call SetParameterAsText on the output
#
in_string = gp.GetParameterAsText(0)
# do error checking here
gp.SetParameterAsText(1, in_string)

As illustrated below, the input data type of the tool would be String, and the output data type would be your target data type (such as Areal Unit). The output parameter type is Derived.

Script tool parameters for converting data types

Learn more about creating script tools.

Converting data to a file

A technique you can use for folder-based workspaces (file geodatabase, coverages, and shapefiles) is to instruct your user to use the Zip compression utility to make a .zip file out of a workspace, then input the .zip file to your tool. Within your geoprocessing service, you can use the unzip script (see below) to unzip the file into a workspace and proceed from there. The same is true for outputs—you can create a .zip file of a workspace and use that for output.

Below are links to two Python scripts, zip.py and unzip.py.


Label Data Type Type Direction
Input zip file File Required Input
Output Location Workspace Required Input
Output Name String Required Input
Output Path Workspace Derived Output

For an example of using these zip utilities, see GP Service example: Clip and ship and GP Service example: Data on demand.