Skip to content

/SnapToRoads

GETGETPOST
Use dark colors for code blocksCopy
1
GET  https://route-api.arcgis.com/arcgis/rest/services/World/SnapToRoadsSync/GPServer/SnapToRoads/execute

The /SnapToRoads direct request can be used to snap a series of GPS track points to the underlying roads. You can return just the snapped points, or lines representing the roads that were traversed. In addition to the geometry, you can have the request return attributes of the roads like the posted speed limit and length in case you need this to perform route adherence.

For example, the following image shows a series of GPS points that were collected while driving a vehicle. The result shows the points snapped to the underlying roads and the roads that were traversed.

 Snap to roads GPS Track

Parameters

NameRequiredTypeDefaultDescription
fstring

The request response format, either json or pjson

tokenstring

An access token with the required privileges.

pointsfeature

Points that you want to snap to the road.

travel_modeobject

The mode of transportation for the analysis provided as a JSON object.

return_linesboolean

false

Whether the request will return output_lines representing the roads traversed.

road_properties_on_snapped_points[string]

Road properties returned on the output_snapped_points output.

road_properties_on_lines[string]

Road properties returned on the output_lines output.

contextobject

Additional settings that affect task operation

overridesstring

For internal use only.

Required parameters

points

Specify the points that you want to snap to the road the vehicle is most likely traveling along. The points can be the GPS points from a navigation device, the tracks captured using ArcGIS Field Maps, or some other set of points that were collected while driving the vehicle.

The distance between the points will affect the performance and final quality of the output. If the points are close together, the algorithm will have a better chance of deducing the probable roads at the expense of processing time. Fewer points will process faster, but may result in the route that was deduced potentially taking different roads.

Show attributes for points

Attributes for points

  • ObjectIDIntegernullable

    The ID of the feature. This field is used to link the output_snapped_points with the input points.

    This field will be used to sequence the points if the location_timestamp field is not present.

  • location_timestampdatetimenullable

    The date and time at which the point was collected. This is the same as the Time field in a GPX file.

    This field will be used to sequence the points if it is available.

  • horizontal_accuracynumber (non-negative)nullable

    The horizontal accuracy of the point measured in meters. This is the same as the HDOP field in a GPX file.

  • speednumber (non-negative)nullable

    The speed of the point in meters per second.

  • coursenumber (non-negative)nullable

    The compass direction of the point in units of 0 to 360 degrees. 0 is due North, 90 is due East and so on.

  • track_idstringnullable

    The ID of the track that the point belongs to. This attribute is used to group points that belong to the same track. You can snap multiple tracks in a single request by assigning unique track IDs to points that belong to different tracks.

    If this field is not present, the algorithm will assume that all points belong to the same track. If track_id is specified for some points and not for others, the ones without a track_id will be unlocated.

Example:

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{
  "features": [
    {
      "attributes": {
        "OBJECTID": 1,
        "location_timestamp": 1704522159000,
        "track_id": "track 1"
      },
      "geometry": {
        "x": -122.43410099956145,
        "y": 37.800155000053394
      }
    },
    {
      "attributes": {
        "OBJECTID": 2,
        "location_timestamp": 1704522171000,
        "track_id": "track 1"
      },
      "geometry": {
Expand

f

The response format.

Use dark colors for code blocksCopy
1
f=json

token

An access token with the required privileges.

  • ArcGIS Location Platform: premium:user:networkanalysis:snaptoroads
  • ArcGIS Online: premium:user:networkanalysis
Use dark colors for code blocksCopy
1
token=<ACCESS_TOKEN>

Learn more about access tokens and privileges in the Security and authentication developer guide.

Optional parameters

travel_mode

Choose the mode of transportation for the analysis. This is the mode of transportation that matches the track data you are analyzing.

The snap to roads algorithms use the travel mode settings when determining the most likely roads that were traveled. For example, if the travel mode restricts travel on express lanes, the algorithms attempt to return roads that are not express lanes. However, in cases where the track clearly indicates the use of an express lane, the algorithms return the express lane regardless of the restriction setting. In other words, the travel mode settings are used as a guideline to influence the snapping behavior, but they may be overridden when the track data does not match those settings.

To learn more about travel modes, see Configure travel modes

return_lines

Specify whether or not the service will return output_lines representing the roads traversed.

  • true—The output_lines will be returned.
  • false—The output_lines will not be returned.

road_properties_on_snapped_points

Allowed values:

  • length_kilometers: The length of the road segment the snapped points locate on in kilometers.
  • length_miles: The length of the road segment the snapped points locate on in miles.
  • posted_speed_limit_kph: The posted speed limit of the road segment the snapped points locate on in kilometers per hour.
  • posted_speed_limit_mph: The posted speed limit of the road segment the snapped points locate on in miles per hour.
  • posted_speed_limit_mps: The posted speed limit of the road segment the snapped points locate on in meters per second.
  • posted_truck_speed_limit_kph: The posted truck speed limit of the road segment the snapped points locate on in kilometers per hour.
  • posted_truck_speed_limit_mph: The posted truck speed limit of the road segment the snapped points locate on in miles per hour.
  • posted_truck_speed_limit_mps: The posted truck speed limit of the road segment the snapped points locate on in meters per second.

Specify the road properties that the service should return on the output_snapped_points output.

For example: road_properties_on_snapped_points=["posted_speed_limit_kph", "posted_truck_speed_limit_kph"]

road_properties_on_lines

Allowed values:

  • length_kilometers: The length of the road segment in kilometers.
  • length_miles: The length of the road segment the in miles.
  • posted_speed_limit_kph: The posted speed limit of the road segment in kilometers per hour.
  • posted_speed_limit_mph: The posted speed limit of the road segment in miles per hour.
  • posted_speed_limit_mps: The posted speed limit of the road segment in meters per second.
  • posted_truck_speed_limit_kph: The posted truck speed limit of the road segment in kilometers per hour.
  • posted_truck_speed_limit_mph: The posted truck speed limit of the road segment in miles per hour.
  • posted_truck_speed_limit_mps: The posted truck speed limit of the road segment in meters per second.

Specify the road properties that the service should return on the output_lines output.

For example: road_properties_on_lines=["length_miles", "length_kilometers"]

analysis_region

Allowed values: Europe, Japan, Korea, MiddleEastAndAfrica, NorthAmerica, SouthAmerica, SouthAsia, Thailand

Specify the region in which to perform the analysis. If a value is not specified for this parameter, the service will automatically calculate the region name based on the location of the input points. Setting the name of the region is recommended to speed up the analysis.

The data coverage page lists the countries that are grouped into each of these regions.

context

This parameter contains additional settings that affect task operation, for example, the spatial reference of the output features.

overrides

Response objects

output_snapped_points

This output is always returned. It includes all of the fields from the input specified in the points parameter plus any fields for the properties specified in the road_properties_on_snapped_points parameter. The output also contains following attributes that are either generated or altered by the service.

Show attributes for output snapped points
  • ObjectIDinteger

    The ID of the feature. This field has the same values as the input points if the ObjectID field was passed in. Otherwise, they are sequential numbers starting with 1 and going up through the number of features returned.

  • confidencedouble

    This field defines the confidence level of the computed solution - how likely it is that the computed snapped location is accurate. Its value is between 0 and 1 where 0 means it didn't snap to a road at all and 1 is very confident that the snapping is correct.

  • line_idinteger

    The ObjectID of the line feature in the output_lines. This field is only present if return_lines is specified as true in the input. This field is used to link the output snapped points with the output lines.

output_lines

This output is returned if return_lines is specified as true in the input. It includes fields for the properties specified in the road_properties_on_lines parameter. The output also contains following attributes that are generated by the service.

Show attributes for output lines
  • ObjectIDinteger

    The ID of the feature.

  • track_idstringnullable

    The ID of the track that the line belongs to. This attribute is used to group lines that belong to the same track. This attribute is only applicable if the input points specify track_id attribute.

  • line_typestring enum

    The type of the output line. The possible values are as following:

    • Road: The output line represents a road segment.
    • OffRoad: The output line represents a segment that is not a road or is not known to the routing data. The offroad segments uses straight line to connect the last point before the offroad segment and the first point after the offroad segment, and all the intermediate points are not snapped.
    • Gap: The output line represents a gap between two part of the tracks. This can happen when the tracks are not continuous, typically when the GPS signal is lost. The gap is represented by a straight line between the last point before the gap and the first point after the gap.

usage_cost

This parameter returns the credits used by the analysis.

Examples

To use the snap to roads request, you need to pass in a set of point features to which you want to snap to roads. In addition to the point geometry, you can include additional GPS-related data to better guide the snapping. You can also specify if you want to return attributes from the underlying roads and if you want to add them on the output points or lines returned.

Below is an example of a request to the Snap to Roads service and a few sample responses:

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
POST https://route-api.arcgis.com/arcgis/rest/services/World/SnapToRoadsSync/GPServer/SnapToRoads/execute HTTP/1.1
Content-Type: application/x-www-form-urlencoded

token=<ACCESS_TOKEN>
&f=json
&points={
  "features": [
    {
      "attributes": {
        "OBJECTID": 1,
        "location_timestamp": 1704522159000
      },
      "geometry": {
        "x": -122.43410099956145,
        "y": 37.800155000053394
      }
    },
    {
      "attributes": {
        "OBJECTID": 2,
Expand

Service limits

The table below lists the limits that apply to this service.

Limit descriptionLimit value

The maximum number of input points

5,000

Maximum geodesic distance

500 miles (804.67 kilometers)

Maximum straight-line distance for the walking travel mode

(If the straight-line distance between any input points is greater than this limit, the analysis fails when the walking restriction is used.)

27 miles (43.45 kilometers)

The maximum time a client can use the Snap to Roads service

5 minutes

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.