FRAMES | NO FRAMES Description | Parameters | Examples | Response
Solve (Operation)
URL http://<nalayer-url>/solve
Parent Resource Network Layer

Note: The Solve Route operation was added at 9.3.1.

Description

The solve operation is performed on a network layer resource.

At 9.3.1, the solve operation is supported only on the route layer. Or specifically, on a network layer whose layerType is esriNAServerRouteLayer.

You can provide arguments to the solve route operation as query parameters defined in the parameters table below.

Parameters

Parameter Details
f Description: The response format. The default response format is html.

Values: html | json
stops Description: The set of stops loaded as network locations during analysis. Stops can be specified using a simple comma / semi-colon based syntax or as a JSON structure.

Syntax and Examples:

Simple syntax:

You can use a simple comma / semi-colon based syntax if you need to specify only stop point geometries in the default spatial reference.

Syntax: stops=x1,y1; x2, y2; ...; xn, yn
Example: stops=-122.4079, 37.78356; -122.404, 37.782

JSON Structures:

Using JSON structures, you can specify 2 types of stops:

  • Features: Stop geometries and attributes expressed as a feature set.
  • Layer: Stops referencing a data layer in the map service.

Features

You can specify stop geometries as well as attributes using a more comprehensive JSON structure.

The JSON structure can include 3 properties:

  • features: An array of features
  • type: Optional. The default type is features
  • doNotLocateOnRestrictedElements: Optional. If true, restricted network elements should be considered when finding network locations. Default is false

Each feature in this array represents a stop and it contains the following fields:

  • geometry: specifies the stop geometry. The structure for the geometry is same as the structure of the standard ArcGIS REST API point geometry.
  • attributes: key-value pairs where the key is the name of the specified field, and the value is the value for the corresponding field.
Syntax:
{ 
"type" : "features",
"features"  : [
{
  "geometry" : {<geometry1>},
  "attributes" : {"<field1>" : <value11>, "<field2>" : <value12>}
},
{
  "geometry" : {<geometry2>},
  "attributes" : {"<field1>" : <value21>, "<field2>" : <value22>}
}
],
"doNotLocateOnRestrictedElements" : true | false
}

Example:
{ 
"features"  : [
{
  "geometry" : {"x" : -122.4079, "y" : 37.78356},
  "attributes" : {"Name" : "From", "RouteName" : "Route A"}
},
{
  "geometry" : {"x" : -122.404, "y" : 37.782},
  "attributes" : {"Name" : "To", "RouteName" : "Route A"}
}
]
}

Layer

You can specify stops by referencing a data layer in the map service. Attribute and spatial filters can also be applied on the layer.

The JSON structure can include the following properties:

  • type: The type should be set to layer to indicate that the user is specifying the stops by referencing a layer.
  • layerName: The name of the data layer in the map service that is being referenced.
  • where: Optional. A where clause for the query filter. Any legal SQL where clause operating on the fields in the layer is allowed.
  • geometry: Optional. The geometry to apply as the spatial filter. The structure of the geometry is the same as the structure of the json geometry objects returned by the ArcGIS REST API.

    The geometry type is specified using the geometryType property.
  • geometryType: Optional. The type of geometry specified by the geometry property. The geometry type can be an envelope, point, line, or polygon. The default geometry type is an envelope.

    Values: esriGeometryPoint | esriGeometryMultipoint | esriGeometryPolyline | esriGeometryPolygon | esriGeometryEnvelope
  • spatialRel: Optional. The spatial relationship to be applied on the input geometry. The supported spatial relationships include intersects, contains, envelope intersects, within, etc. The default spatial relationship is intersects (esriSpatialRelIntersects).

    Values: esriSpatialRelIntersects | esriSpatialRelContains | esriSpatialRelCrosses | esriSpatialRelEnvelopeIntersects | esriSpatialRelIndexIntersects | esriSpatialRelOverlaps | esriSpatialRelTouches | esriSpatialRelWithin
  • doNotLocateOnRestrictedElements: Optional. If true, restricted network elements should be considered when finding network locations. Default is false
Syntax:
{ 
"type" : "layer",
"layerName" : "<layerName>",
"where" : "<whereClause>",
"geometry" : {<geometry>},
"geometryType" : "<geometryType>",
"spatialRel" : "<spatialRel>",
"doNotLocateOnRestrictedElements" : true | false
}

Example:
{ 
"type" : "layer",
"layerName" : "PointsOfInterest",
"where" : "CITY = 'San Francisco'"
}
barriers Description: The set of barriers loaded as network locations during analysis. Barriers can be specified using a simple comma / semi-colon based syntax or as a JSON structure.

Syntax and Examples:

Simple syntax:

You can use a simple comma / semi-colon based syntax if you need to specify only barrier point geometries in the default spatial reference.

Syntax: barriers=x1,y1; x2, y2; ...; xn, yn
Example: barriers=-122.406, 37.7831; -122.405, 37.7827

JSON Structures:

Using JSON structures, you can specify 2 types of barriers:

  • Features: Barrier geometries and attributes expressed as a feature set.
  • Layer: Barriers referencing a data layer in the map service.

Features

You can specify barrier geometries as well as attributes using a more comprehensive JSON structure.

The JSON structure can include 2 properties:

  • features: An array of features
  • type: Optional. The default type is features

Each feature in this array represents a barrier and it contains the following fields:

  • geometry: specifies the barrier geometry. The structure for the geometry is same as the structure of the standard ArcGIS REST API point geometry.
  • attributes: key-value pairs where the key is the name of the specified field, and the value is the value for the corresponding field.
Syntax:
{ 
"type" : "features",
"features"  : [
{
  "geometry" : {<geometry1>},
  "attributes" : {"<field1>" : <value11>, "<field2>" : <value12>}
},
{
  "geometry" : {<geometry2>},
  "attributes" : {"<field1>" : <value21>, "<field2>" : <value22>}
}
]
}

Example:
{ 
"features"  : [
{
  "geometry" : {"x" : -122.406, "y" : 37.7831},
  "attributes" : {"Name" : "Barrier 1", "RouteName" : "Route A"}
},
{
  "geometry" : {"x" : -122.405, "y" : 37.7827},
  "attributes" : {"Name" : "Barrier 2", "RouteName" : "Route A"}
}
]
}

Layer

You can specify barriers by referencing a data layer in the map service. Attribute and spatial filters can also be applied on the layer.

The JSON structure can include the following properties:

  • type: The type should be set to layer to indicate that the user is specifying the barriers by referencing a layer.
  • layerName: The name of the data layer in the map service that is being referenced.
  • where: Optional. A where clause for the query filter. Any legal SQL where clause operating on the fields in the layer is allowed.
  • geometry: Optional. The geometry to apply as the spatial filter. The structure of the geometry is the same as the structure of the json geometry objects returned by the ArcGIS REST API.

    The geometry type is specified using the geometryType property.
  • geometryType: Optional. The type of geometry specified by the geometry property. The geometry type can be an envelope, point, line, or polygon. The default geometry type is an envelope.

    Values: esriGeometryPoint | esriGeometryMultipoint | esriGeometryPolyline | esriGeometryPolygon | esriGeometryEnvelope
  • spatialRel: Optional. The spatial relationship to be applied on the input geometry. The supported spatial relationships include intersects, contains, envelope intersects, within, etc. The default spatial relationship is intersects (esriSpatialRelIntersects).

    Values: esriSpatialRelIntersects | esriSpatialRelContains | esriSpatialRelCrosses | esriSpatialRelEnvelopeIntersects | esriSpatialRelIndexIntersects | esriSpatialRelOverlaps | esriSpatialRelTouches | esriSpatialRelWithin
Syntax:
{ 
"type" : "layer",
"layerName" : "<layerName>",
"where" : "<whereClause>",
"geometry" : {<geometry>},
"geometryType" : "<geometryType>",
"spatialRel" : "<spatialRel>"
}

Example:
{ 
"type" : "layer",
"layerName" : "TrafficAccidents",
"where" : "SEVERITY > 0"
}
returnDirections Description: If true, directions will be generated and returned with the analysis results. Default is true.

The directions are available in the directions property of the JSON response.

Values: true | false
returnRoutes Description: If true, routes will be returned with the analysis results. Default is true.

The routes are available in the routes property of the JSON response.

Values: true | false
returnStops Description: If true, stops will be returned with the analysis results. Default is false.

The stops are available in the stops property of the JSON response.

Values: true | false
returnBarriers Description: If true, barriers will be returned with the analysis results. Default is false.

The barriers are available in the barriers property of the JSON response.

Values: true | false
outSR Description: The well-known ID of the spatial reference for the geometries returned with the analysis results. If outSR is not specified, the geometries are returned in the spatial reference of the map.
ignoreInvalidLocations Description: If true, the solver will ignore invalid locations. Otherwise, it will raise an error. The default is as defined in the network layer.

Values: true | false
outputLines Description: The type of output lines to be generated in the result. The default is as defined in the network layer.

Values: esriNAOutputLineNone | esriNAOutputLineStraight | esriNAOutputLineTrueShape | esriNAOutputLineTrueShapeWithMeasure
findBestSequence Description: If true, the solver should resequence the route in the optimal order. The default is as defined in the network layer.

Values: true | false
preserveFirstStop Description: If true, the solver should keep the first stop fixed in the sequence. The default is as defined in the network layer.

Values: true | false
preserveLastStop Description: If true, the solver should keep the last stop fixed in the sequence. The default is as defined in the network layer.

Values: true | false
useTimeWindows Description: If true, the solver should consider time windows. The default is as defined in the network layer.

Values: true | false
startTime Description: The time the route begins. If not specified, the solver will not start the route at a particular time.

The time should be specified as a numeric value representing the milliseconds since midnight January 1, 1970. It can be a negative number.

You can also specify a value of none to indicate that a start time should not be used.

Example: startTime=1227663551096 (Tue Nov 25 2008 17:39:11)
accumulateAttributeNames Description: The list of network attribute names to be accumulated with the analysis. The default is as defined in the network layer.

The value should be specified as a comma separated list of attribute names.

You can also specify a value of none to indicate that no network attributes should be accumulated.

Example: accumulateAttributeNames=WalkingMinutes,Meters
impedanceAttributeName Description: The network attribute name to be used as the impedance attribute in analysis. The default is as defined in the network layer.

Example: impedanceAttributeName=DrivingMinutes
restrictionAttributeNames Description: The list of network attribute names to be used as restrictions with the analysis. The default is as defined in the network layer.

The value should be specified as a comma separated list of attribute names.

You can also specify a value of none to indicate that no network attributes should be used as restrictions.

Example: restrictionAttributeNames=Oneway
restrictUTurns Description: Specifies how U-Turns should be restricted in the analysis. The default is as defined in the network layer.

Values: esriNFSBAllowBacktrack | esriNFSBAtDeadEndsOnly | esriNFSBNoBacktrack
useHierarchy Description: If true, the hierarchy attribute for the network should be used in analysis. The default is as defined in the network layer.

Values: true | false
directionsLanguage Description: The language to be used when computing directions. The default is as defined in the network layer.

Example: directionsLanguage=en_US
outputGeometryPrecision Description: The precision of the output geometry after generalization. If 0, no generalization of output geometry is performed. The default is as defined in the network service configuration. If present and positive, it represents the MaximumAllowableOffset parameter - generalization is performed according to IPolycurve.Generalize.

Example: outputGeometryPrecision=0.5
outputGeometryPrecisionUnits Description: The units of the output geometry precision. The default value is esriUnknownUnits

Values: esriUnknownUnits | esriCentimeters | esriDecimalDegrees | esriDecimeters | esriFeet | esriInches | esriKilometers | esriMeters | esriMiles | esriMillimeters | esriNauticalMiles | esriPoints | esriYards
directionsLengthUnits Description: The length units to use when computing directions. The default is as defined in the network layer.

Values: esriNAUCentimeters | esriNAUDays | esriNAUDecimalDegrees | esriNAUDecimeters | esriNAUFeet | esriNAUHours | esriNAUInches | esriNAUKilometers | esriNAUMeters | esriNAUMiles | esriNAUMillimeters | esriNAUMinutes | esriNAUNauticalMiles | esriNAUPoints | esriNAUSeconds | esriNAUUnknown | esriNAUYards
directionsTimeAttributeName Description: The name of network attribute to use for the drive time when computing directions. The default is as defined in the network layer.

Example: directionsTimeAttributeName=DriveTime

Example Usage

Example 1: TODO

JSON Response Syntax

{
"directions": [
{
  "routeId": <routeId>,
  "routeName": "<routeName>",
  "summary": {
    "totalLength": <totalLength>,
    "totalTime": <totalTime>,
    "totalDriveTime": <totalDriveTime>,
    "envelope": {<envelope>}
  },
  "features": [
    {
      "attributes" : 
      {
        "length": <length1>,
        "time": <time1>,
        "text": "<text1>",
        "ETA": <ETA>,
        "maneuverType": "<maneuverType1>"
      },
      "compressedGeometry": "<compressedGeometry1>"
    },
    {
      "attributes" : 
      {
        "length": <length2>,
        "time": <time2>,
        "text": "<text2>",
        "maneuverType": "<maneuverType2>"
      },
      "compressedGeometry": "<compressedGeometry2>"
    }
  ]
}
],
"routes": {
  "features": [
  {
    "attributes": {
      "<field1>": <value11>,
      "<field2>": <value12>
    },
    "geometry": {<polyline1>}
  },
  {
    "attributes": {
      "<field1>": <value21>,
      "<field2>": <value22>
    },
    "geometry": {<polyline2>}
  }
  ]
},
"stops": {
  "features": [
  {
    "attributes": {
      "<field1>": <value11>,
      "<field2>": <value12>
    },
    "geometry": {<point1>}
  },
  {
    "attributes": {
      "<field1>": <value21>,
      "<field2>": <value22>
    },
    "geometry": {<point2>}
  }
  ]
},
"barriers": {
  "features": [
  {
    "attributes": {
      "<field1>": <value11>,
      "<field2>": <value12>
    },
    "geometry": {<point1>}
  },
  {
    "attributes": {
      "<field1>": <value21>,
      "<field2>": <value22>
    },
    "geometry": {<point2>}
  }
  ]
},
"messages": [
  { "type": <type1>, "description": "<description1>" },
  { "type": <type2>, "description": "<description2>" }
]
}

JSON Response Example

{
"directions": [
{
  "routeId": 1,
  "routeName": "Location 1 - Location 2",
  "summary": {
    "totalLength": 0.50052060003988,
    "totalTime": 0.95,
    "totalDriveTime": 0.94686265905424,
    "envelope": {"xmin": -122.4079, "ymin": 37.782, "xmax": -122.40272, "ymax": 37.784}
  },
  "features": [
    {
      "attributes: {
        "length": 0,
        "time": 0,
        "text": "Start at Location 1",
        "ETA": 1227663551096,
        "maneuverType": "esriDMTDepart"
      },
      "compressedGeometry": "+1lmd-6dda6+1vcv5+0+0"
    },
    {
      "attributes: {
        "length": 0.021503010479337,
        "time": 0.0515989876798832,
        "text": "Go northeast on Stevenson St toward 5th St",
        "ETA": 1228163550000,
        "maneuverType": "esriDMTStraight"
      },
      "compressedGeometry": "+1lmd-6dda6+1vcv5+f+c"
    },
    {
      "attributes: {
        "length": 0.1085833094564,
        "time": 0.260563671374356,
        "text": "Turn right on Howard St",
        "ETA": 1228724380080,
        "maneuverType": "esriDMTTurnRight"
      },
      "compressedGeometry": "+1lmd-6dd1i+1vcv0-o-j-1l-1a"
    },
    {
      "attributes: {
        "length": 0,
        "time": 0,
        "text": "Finish at Location 2, on the left",
        "ETA": 1229125881280,
        "maneuverType": "esriDMTStop"
      },
      "compressedGeometry": "+1lmd-6dd3v+1vct3+0+0"
    }
  ]
}
],
"routes": {
  "features": [
  {
    "attributes": {
      "ObjectID": 1,
      "Name": "Location 1 - Location 2",
      "FirstStopID": 1,
      "LastStopID": 2,
      "StopCount": 2,
      "Total_Minutes": 12.6930240139726,
      "Total_Meters": 16446.0849108173,
      "Shape_Length": 0.171641389705288
    },
    "geometry": {
      "paths": [[
        [-122.407735892572, 37.7833496425899],
        [-122.407456001947, 37.7835679980589],
        [-122.407200001947, 37.7833439980587],
        [-122.407024001946, 37.7831999980585]
      ]]
    }
  }
  ]
},
"stops": {
  "features": [
  {
    "attributes": {
      "ObjectID": 1,
        "Name": "Location 1",
        "Sequence": 1,
        "TimeWindowStart": null,
        "TimeWindowEnd": null,
        "ArriveCurbApproach": 1,
        "DepartCurbApproach": 2
    },
    "geometry": { "x": -122.4079, "y": 37.7835 }
    }
  },
  {
    "attributes": {
      "ObjectID": 2,
        "Name": "Location 2",
        "Sequence": 2,
        "TimeWindowStart": null,
        "TimeWindowEnd": null,
        "ArriveCurbApproach": 1,
        "DepartCurbApproach": 2
    },
    "geometry": { "x": -122.3931, "y": 37.79496 }
    }
  }
  ]
},
"barriers": {
  "features": [
  {
    "attributes": {
      "ObjectID": 1,
      "Name": "Barrier 1",
      "SourceID": 1,
      "SourceOID": 9619,
      "PosAlong": 0.841037735851507,
      "SideOfEdge": 2,
      "CurbApproach": null,
      "Status": 0
    },
    "geometry": { "x": -122.41, "y": 37.7889 }
    }
  }
  ]
},
"messages": [
  {
    "type": 50,
    "description": "Location \"Location 3\" in \"Stops\" is unlocated."
  },
  {
    "type": 50,
    "description": "Location \"Location 4\" in \"Stops\" is unlocated."
  }
]
}