Skip to content

Valhalla locate service API reference

Valhalla's locate service, is an open-source service that provides detailed information about streets and intersections close to an input point with some added matching criteria. This allows for tight integration in routing and navigation applications on web or mobile.

View an interactive demo

The default logic for the OpenStreetMap tags, keys, and values used when routing are documented on an OSM wiki page.

Inputs of a locate request

The locate request run locally takes the form of localhost:8002/locate?json={}, where the JSON inputs inside the {} include location information, name and options for the costing model, and output options. Here is the JSON payload for an example request:

{"verbose":true,"locations":[{"lat":42.358528,"lon":-83.271400},{"lat":42.996613,"lon":-78.749855}],"costing":"bicycle","costing_options":{"bicycle":{"bicycle_type":"road"}},"directions_options":{"units":"miles"},"id":"12abc3afe23984fe"}

This request provides detailed information about specific streets and intersections near the two input locations. Steets which do not have a surface type condusive to road bicycles will be excluded from the results. The units used for the lengths of the street sections will be displayed in miles.

There is an option to name your request. You can do this by adding and id key to your request. The id is returned with the response so a user could match to the corresponding request.

Because the locate service is designed to work in tandem with the route service API, the inputs for the two APIs are identical. For detailed options regarding specifying locations, costing models, costing options, directions options please see the relevant sections in the routing API docs

Other request options

Options Description
verbose Can be set to true or false, but defaults to false. If set to true dense attribution of the given street or intersection will be returned.
id Name your route request. If id is specified, the naming will be sent through to the response.

Outputs of a locate request

If a request has been named using the optional id key, then this id key and value will be echoed in the JSON response object.

The locate results are returned as a JSON array, with one JSON object per input location in the order specified. In verbose mode details about the streets and intersections including mode of travel access, names, way ids, shape, side of street as well as the closest point to the input along these features will be returned. If verbose was not enabled only the closest point, way id and side of street will be returned. A warnings array may also be included. This array may contain warning objects informing about deprecated request parameters, clamped values etc. |

Here are some sample results with verbose set to false:

[
  {
    "input_lon": -76.495743,
    "input_lat": 40.310555,
    "nodes": [
      {
        "lat": 40.313206,
        "lon": -76.494987
      }
    ],
    "edges": [
      {
        "way_id": 12292268,
        "correlated_lat": 40.313206,
        "side_of_street": "neither",
        "percent_along": 0,
        "correlated_lon": -76.494987
      },
      {
        "way_id": 12292268,
        "correlated_lat": 40.313206,
        "side_of_street": "neither",
        "percent_along": 1,
        "correlated_lon": -76.494987
      }
    ],
    "warnings": [
      "hov costing is deprecated and will be turned into auto costing with hov2=true costing option"
    ]
  }
]

Here are some sample results with verbose set to true:

[
  {
    "input_lon": -76.495743,
    "input_lat": 40.310555,
    "nodes": [
      {
        "traffic_signal": false,
        "type": "street_intersection",
        "lat": 40.313206,
        "node_id": {
          "id": 3080,
          "value": 103353655794,
          "tile_id": 750654,
          "level": 2
        },
        "access": {
          "wheelchair": true,
          "taxi": false,
          "HOV": true,
          "truck": true,
          "emergency": true,
          "pedestrian": true,
          "car": true,
          "bus": true,
          "bicycle": true
        },
        "lon": -76.494987,
        "edge_count": 1,
        "administrative": {
          "time_zone_posix": "EST-05EDT+01,M3.2.0/02:00,M11.1.0/02:00",
          "standard_time_zone_name": "EST",
          "iso_3166-1": "US",
          "daylight_savings_time_zone_name": "EDT",
          "country": "United States of America",
          "iso_3166-2": "PA",
          "state": "Pennsylvania"
        },
        "intersection_type": "dead-end",
        "density": 2,
        "local_edge_count": 1,
        "mode_change": false
      }
    ],
    "edges": [
      {
        "edge_id": {
          "id": 7660,
          "value": 257032954354,
          "tile_id": 750654,
          "level": 2
        },
        "edge_info": {
          "shape": "ivo{kAvg{{pCiMlJ{FfDgDm@c_AqxBeFO}}@`]",
          "way_id": 12292268,
          "names": [
            "Bomgardner Lane"
          ]
        },
        "edge": {
          "classification": {
            "link": false,
            "internal": false,
            "surface": "paved_smooth",
            "classification": "residential"
          },
          "end_node": {
            "id": 3081,
            "value": 103387210226,
            "tile_id": 750654,
            "level": 2
          },
          "speed": 30,
          "traffic_signal": false,
          "start_restriction": {
            "moped": false,
            "wheelchair": false,
            "taxi": false,
            "HOV": false,
            "truck": false,
            "emergency": false,
            "pedestrian": false,
            "car": false,
            "bus": false,
            "bicycle": false
          },
          "speed_limit": 0,
          "geo_attributes": {
            "weighted_grade": 1.67,
            "length": 388
          },
          "cycle_lane": "none",
          "access_restriction": false,
          "part_of_complex_restriction": false,
          "country_crossing": false,
          "has_exit_sign": false,
          "lane_count": 1,
          "speed_type": "classified",
          "drive_on_right": true,
          "destination_only": false,
          "seasonal": false,
          "tunnel": false,
          "bridge": false,
          "access": {
            "moped": true,
            "wheelchair": true,
            "taxi": false,
            "HOV": true,
            "truck": true,
            "emergency": false,
            "pedestrian": true,
            "car": true,
            "bus": true,
            "bicycle": true
          },
          "toll": false,
          "round_about": false,
          "bike_network": {
            "mountain": false,
            "local": false,
            "regional": false,
            "national": false
          },
          "end_restriction": {
            "moped": false,
            "wheelchair": false,
            "taxi": false,
            "HOV": false,
            "truck": false,
            "emergency": false,
            "pedestrian": false,
            "car": false,
            "bus": false,
            "bicycle": false
          },
          "unreachable": false,
          "forward": true,
          "not_thru": false,
          "truck_route": false,
          "use": "road"
        },
        "minimum_reachability": 51,
        "score": 899846.4,
        "traffic_segments": [],
        "percent_along": 0,
        "correlated_lon": -76.494987,
        "side_of_street": "neither",
        "correlated_lat": 40.313206
      },
      {
        "edge_id": {
          "id": 7661,
          "value": 257066508786,
          "tile_id": 750654,
          "level": 2
        },
        "edge_info": {
          "shape": "ivo{kAvg{{pCiMlJ{FfDgDm@c_AqxBeFO}}@`]",
          "way_id": 12292268,
          "names": [
            "Bomgardner Lane"
          ]
        },
        "edge": {
          "classification": {
            "link": false,
            "internal": false,
            "surface": "paved_smooth",
            "classification": "residential"
          },
          "end_node": {
            "id": 3080,
            "value": 103353655794,
            "tile_id": 750654,
            "level": 2
          },
          "speed": 30,
          "traffic_signal": false,
          "start_restriction": {
            "moped": false,
            "wheelchair": false,
            "taxi": false,
            "HOV": false,
            "truck": false,
            "emergency": false,
            "pedestrian": false,
            "car": false,
            "bus": false,
            "bicycle": false
          },
          "speed_limit": 0,
          "geo_attributes": {
            "weighted_grade": -1.67,
            "length": 388
          },
          "cycle_lane": "none",
          "access_restriction": false,
          "part_of_complex_restriction": false,
          "country_crossing": false,
          "has_exit_sign": false,
          "lane_count": 1,
          "speed_type": "classified",
          "drive_on_right": true,
          "destination_only": false,
          "seasonal": false,
          "tunnel": false,
          "bridge": false,
          "access": {
            "moped": true,
            "wheelchair": true,
            "taxi": false,
            "HOV": true,
            "truck": true,
            "emergency": false,
            "pedestrian": true,
            "car": true,
            "bus": true,
            "bicycle": true
          },
          "toll": false,
          "round_about": false,
          "bike_network": {
            "mountain": false,
            "local": false,
            "regional": false,
            "national": false
          },
          "end_restriction": {
            "moped": false,
            "wheelchair": false,
            "taxi": false,
            "HOV": false,
            "truck": false,
            "emergency": false,
            "pedestrian": false,
            "car": false,
            "bus": false,
            "bicycle": false
          },
          "unreachable": false,
          "forward": false,
          "not_thru": true,
          "truck_route": false,
          "use": "road"
        },
        "minimum_reachability": 51,
        "score": 899846.4,
        "traffic_segments": [],
        "percent_along": 1,
        "correlated_lon": -76.494987,
        "side_of_street": "neither",
        "correlated_lat": 40.313206
      }
    ],
    "warnings": [
      "hov costing is deprecated and will be turned into auto costing with hov2=true costing option"
    ]
  }
]

Attribute Descriptions for Responses

Edge

Verbose
Key Description
access_restrictions A list of access restrictions that apply to the edge. Each entry contains information about its access mode mask, value, and more
edge_info Contains information stored in the edge's EdgeInfo struct
edge_info.conditional_speed_limits The key describes the time window during which the speed limit applies, the value is the limit
edge_info.speed_limit The edge's speed limit
edge_info.levels An array containing the edge's levels as derived from the level=* tag. Values are either numeric, or another array containing two elements, which denote the start and end of a range (inclusive)

HTTP status codes and error messages

Because the locate service API is so tightly integrated with the route service API the two share the same list of response codes and error messages. Please review the full lists in the routing service API documentation