openrouteservice-py icon indicating copy to clipboard operation
openrouteservice-py copied to clipboard

Distance_matrix not working with metrics parameter

Open bromosky opened this issue 2 years ago • 1 comments

Here's what I did

Used following code:

client_ors = openrouteservice.Client(key='<KEY>')
df_bus_stops_distances = client_ors.distance_matrix(llist_coords_bus_stops, metrics="distance")

and same without metrics parameter.

Tried on the API-Playground, it worked. Tried with the example code as python snippet from the API-Playground, that also worked.


Here's what I got

url:
https://api.openrouteservice.org/v2/matrix/driving-car/json?
Headers:
{
  "headers": {
    "User-Agent": "ORSClientPython.v2.2.2",
    "Content-type": "application/json",
    "Authorization": "<KEY>"
  },
  "timeout": 60,
  "json": {
    "locations": [
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ],
      [
        x,
        y
      ]
    ],
    "profile": "driving-car",
    "metrics": "distance"
  }
}

openrouteservice.exceptions.ApiError: 400 ({'error': {'code': 6003, 'message': "Parameter 'metrics' has incorrect value or format."}, 'info': {'engine': {'build_date': '2023-06-16T03:06:42Z', 'version': '7.1.0'}, 'timestamp': 1687986526446}})


Here's what I was expecting

Should get a working response, as using metrics-parameter works on normal REST-API calls (API-Playground/python example code)


Here's what I think could be improved

Looked at the code of this package, especially at the distance_matrix.py. Couldn't figure out the problem. I'm sorry.

bromosky avatar Jun 28 '23 21:06 bromosky

A belated answer: I think the intended usage is that the metrics argument needs to be a list of strings to work correctly even if you only want to get the distance:

ors.distance_matrix.distance_matrix(ors_client, locations, metrics=['distance'])

I'm not sure this behaviour is very intuitive or clear from the documentation, and kinda different to how the api playground handles this iirc.

I would be inclined to make that argument a bit smarter and deal with both a string and a list of string

Chwiggy avatar Dec 05 '24 09:12 Chwiggy