Tutorial
  • ES | EN
  • API de Ruteo

    Ruteo: El API de ruteo tiene la capacidad de generar una ruta entre un origen y un destino, además tiene funcionalidades como agregar paradas obligatorias a una ruta, optimizar el orden en el que se hacen las paradas, entre otras funciones que se describen a detalle en la Especificación Técnica.

    Ruteo Básico

    SinTráfico te asignará una llave para poder hacer uso del API. Esta llave deberá ser mandada en cada petición. Puede ser mandada con el parámetro key o apiKey.

    El ejemplo pide una ruta que empieza en el punto (19.285994, -99.342323) y termina en el punto (19.58232, -98.913169).

    La respuesta recibida está en formato JSON. Es un diccionario con la información de la ruta. Las llaves que incluye son:

    apiKey La llave con la que se generó la ruta

    start El punto de inicio de la ruta

    end El punto final de la ruta

    created_at Fecha y hora (en UTC) en que fue creada la ruta

    routes Un arreglo con las rutas encontradas

    Cada ruta tiene:
    duration La duración del viaje en segundos

    distance La distancia del viaje en metros

    summary Resumen de minutos y kilómetros de la ruta

    legs Arreglo con la información de ruta entre waypoints. Si sólo hay origen y destino, sólo habrá un leg.

    geometry Un objeto en formato GeoJSON. Línea con todos los puntos por donde pasará la ruta. Incluye el tipo y un arreglo de coordenadas.

    Cada leg tiene:
    duration La duración del viaje en segundos

    distance La distancia del viaje en metros

    summary Resumen de minutos y kilómetros de la ruta

    steps Arreglo; cada elemento representa el siguiente paso de la ruta

    Cada step tiene:
    Name El nombre de la calle de este step si está disponible

    duration La duración del viaje en segundos

    distance La distancia del viaje en metros

    geometry Un objeto en formato GeoJSON. Línea con todos los puntos por donde pasará la ruta. Incluye el tipo y un arreglo de coordenadas.

    Ejemplos de código

    cURL
    curl "http://api.sintrafico.com/route?key=[llave asignada]&start=19.385994,-99.192323&end=19.458232,-99.113169"
    Python
                import requests
                params = {
                    'key': '[llave asignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169'
                }
                route = requests.get('http://api.sintrafico.com/route',
                params=params)
               
    Javascript
                var parameters =  {
                    'key': '[llave assignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169'
                };
                $.getJSON('http://api.sintrafico.com/route', parameters)
                    .done(function(data, textStatus, jqXHR) {
                        // procesar información
                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {
                        alert('Error ' + jqXHR.status);
                    })
              

    Ruteo Con Poleo

    Cuando la ruta se genera en tiempo real, la respuesta del servidor tendrá el código 201 y el objeto JSON tendrá una cadena de texto bajo la llave req_id. Éste es el identificador asociado con la ruta generada. El recibir este identificador quiere decir que la ruta ya se está generando en el servidor.

    Para obtener la ruta, hay que hacer una petición enviando el identificador recibido. Si ya está lista, la respuesta tendrá el código 200 y el objeto JSON descrito anteriormente. De lo contrario, el código será 202 y el objeto indicará que la ruta todavía se está procesando.

    Ejemplos de código

    cURL

    Petición para crear ruta

    $ curl "http://api.sintrafico.com/route?key=[llave asignada]&start=19.385994,-99.192323&end=19.458232,-99.113169&vehicle_type=8"

    Respuesta

    201;
    {"status": "Request successfully created.", "req_id": "403a7922ecd8f75d"}

    Petición para obtener ruta

    $ curl "http://api.sintrafico.com/route?key=[llave asignada]&req_id=403a7922ecd8f75d

    Respuesta cuando no está lista

    202;
    {"status": "Your request is still in progress.", "req_id": "403a7922ecd8f75d"}
    Python

    Petición para crear ruta

                import requests
                import json
                params = {
                    'key': '[llave asignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.658232,-98.913169'
                    'vehicle_type': 8  # muy grande para algunas calles
                }
                route = requests.get('http://api.sintrafico.com/route', params=params)
                route.status_code == 201
                req_id = route.json()['req_id']
               

    Petición para obtener ruta

                import requests
                  import json
                  status_code = 0
                  route = None
                  params = {
                      'key': '[llave asignada]',
                      'req_id': '403a7922ecd8f75d' # req_id recibido arriba
                  }
                  while status_code != 200:
                      # Si se repite:
                      # route.status_code == 202
                      # route.json() == {"status": "Your request is still in progress.",
                      #                  "req_id": "403a7922ecd8f75d"
                      route = requests.get('http://api.sintrafico.com/route', params=params)
                      status_code = route.status_code
                  # en route está el objeto JSON
               
    Javascript

    Petición para crear ruta

                var req_id = '';
                var parameters =  {
                    'key': '[llave assignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169'
                    'vehicle_type: 8  // muy grande para algunas calles
                };
                $.getJSON('http://api.sintrafico.com/route', parameters)
                    .done(function(data, textStatus, jqXHR) {
                        req_id = data.req_id;
                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {
                        alert('Error ' + jqXHR.status);
                    })
              

    Petición para obtener ruta

                var statusCode = 0;
                var parameters =  {
                    'key': '[llave assignada]',
                    'req_id': req_id,
                };
                while (statusCode != 200) {
                    $.getJSON(url, parameters)
                        .done(function(data, textStatus, jqXHR) {
                            statusCode = jqXHR.status
                            if (statusCode == 202) {
                                // Esperar un segundo para la siguiente petición
                                window.setTimeout(function(){}, 1000)
                            } else if (statusCode == 200)
                                // Procesar información
                            }
                        })
                        .fail(function(jqXHR, textStatus, errorThrown) {
                            alert('Error ' + jqXHR.status);
                        })
                }
              

    Ruteo Con Paradas

    Para agregar paradas a la ruta, se usa el parámetro wp[] (waypoints). Este parámetro puede recibir varios valores. Si hay más de uno, las paradas se visitan en orden. Si se desea optimizar el orden de visita de las paradas, se puede pasar la bandera optimize=true (para optimizar se necesitan al menos 4 puntos).

    El ejemplo pide una ruta que empieza en el punto (19.285994, -99.342323) y termina en el punto (19.58232, -98.913169), con una parada en el punto (19.425009, -99.145083) y otra en el punto (19.435901,-99.124062).

    Ejemplos de código

    cURL
    $ curl "http://api.sintrafico.com/route?key=[llave asignada]&start=19.385994,-99.192323&end=19.458232,-99.113169&wp[]=19.425009,-99.145083&wp[]=19.435901,-99.124062"
    Python
                import requests
                params = {
                    'key': '[llave asignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169',
                    'wp[]': ['19.425009,-99.145083', '19.435901,-99.124062']
                }
                route = requests.get('http://api.sintrafico.com/route', params=params)
               
    Javascript
                var parameters =  {
                    'key': '[llave assignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169',
                    'wp[]': ['19.425009,-99.145083', '19.435901,-99.124062']
                };
                $.getJSON('http://api.sintrafico.com/route', parameters)
                    .done(function(data, textStatus, jqXHR) {
                        // procesar información
                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {
                        alert('Error ' + jqXHR.status);
                    })
              

    Ruteo Con Puntos de interés

    Las rutas pueden incluir puntos de interés. Los puntos de interés disponibles son estacionamientos (1), casetas (2), gasolineras (3) e incidentes (4). Hay dos parámetros que se pueden pasar a la petición para obtener PDIs en la respuesta: poi_set[] se usa para encontrar los PDIs cerca del punto final de la ruta; poi_in[] se usa para encontrar los PDIs a lo largo de la ruta. Pueden recibir más de un PDI.

    Estos parámetros reciben números enteros indicando el tipo de PDI que se desea:

    Estacionamientos
    Casetas
    Gasolineras
    Incidentes

    Cuando la petición incluye PDIs, el objeto JSON de la respuesta incluirá un objeto en la llave pois que tendrá una llave por cada PDI y el objeto de la llave es un arreglo con los PDIs encontrados.

    Ejemplos de código

    cURL
    $ curl "http://api.sintrafico.com/route?key=[llave asignada]&start=19.385994,-99.192323&end=19.458232,-99.113169&poi_in[]=1&poi_in[]=2"
    Python
                import requests
                params = {
                    'key': '[llave asignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169',
                    'poi_in[]': [1, 2]
                }
                route = requests.get('http://api.sintrafico.com/route', params=params)
               
    Javascript
                var parameters =  {
                    'key': '[llave assignada]',
                    'start': '19.385994,-99.192323',
                    'end': '19.458232,-99.113169',
                    'poi_in[]': [1, 2]
                };
                $.getJSON('http://api.sintrafico.com/route', parameters)
                    .done(function(data, textStatus, jqXHR) {
                        // procesar información
                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {
                        alert('Error ' + jqXHR.status);
                    })
              

    Isocronas

    La API de SinTráfico calcula una geometría con un área cubierta por un tiempo de viaje y punto seleccionado, esto se recomienda para medir el alcance de un punto.

    Éste considera algunos parámetros adicionales como rango de tiempo (día de la semana por la mañana o por la tarde, fin de semana por la mañana o por la tarde) y tipo de transporte (coche, bicicleta y peatón).

    Además podemos calcular los lugares relevantes de dicha área con sus puntos próximos (puntos visitados por la mayoría de los usuarios).

    Ejemplos de código

    cURL
    curl "http://api.sintrafico.com/isochrone?key=[llave asignada]&req_id=1&lat=19.425009&lon=-99.145083&insideOut=false&range=weekday&length=30&foursquare=true&transport=car&polling=false"
    Python
                import requests
                    params = {
                        'key': '[assigned key]',
                        'lat': '19.385994',
                        'lon': '-99.113169',
                        'insideOut': 'false',
                        'range': 'weekday',
                        'length': '30',
                        'foursquare': 'true',
                        'transport': 'car',
                        'polling': 'false'
                    }
                    route = requests.get('http://api.sintrafico.com/isochrone',
                                        params=params)
               
    Javascript
                var parameters =  {
                    'key': '[assigned key]',
                    'lat': '19.385994',
                    'lon': '-99.113169',
                    'insideOut': 'false',
                    'range': 'weekday',
                    'length': '30',
                    'foursquare': 'true',
                    'transport': 'car',
                    'polling': 'false'
                };
                $.getJSON('http://api.sintrafico.com/isochrone', parameters)
                    .done(function(data, textStatus, jqXHR) {
                        // process information
                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {
                        alert('Error ' + jqXHR.status);
                    })
              

    Parámetros

    Todos los parámetros que recibe el generador de rutas

    key La llave asignada

    req_id El identificador de la ruta pedida. Si se envía, los demás parámetros serán ignorados.

    start "lat,lon": dos puntos flotantes separados por una coma. Punto de inicio de la ruta.

    end "lat,lon": dos puntos flotantes separados por una coma. Punto final de la ruta.

    poi_set[] Los tipos de PDIs a encontrar al final de la ruta.

    poi_in[] Los tipos de PDIs a encontrar a lo largo de la ruta.

    departure_time Hora (UTC) de inicio de ruta en formato de 24 horas: HH:mm.

    optimize Bandera que indica si la ruta con paradas se debe optimizar o respetar el orden.

    wp[] "lat,lon": dos puntos flotantes separados por una coma. Las paradas en la ruta que hay que visitar antes del destino

    save Bandera que indica si la ruta debe ser guardada para usar a futuro.

    tolls Bandera para indicar si se desea obtener los precios de casetas.

    vehicle_type Número indicando el tipo de vehículo que va a realizar el viaje. Moto
    Auto
    Eje Ligero
    Autobús 2 ejes
    Autobús 3 ejes
    Autobús 4 ejes
    Camión 2 ejes
    Camión 3 ejes
    Camión 4 ejes
    Camión 5 ejes
    Camión 6 ejes
    Camión 7 ejes
    Camión 8 ejes
    Camión 9 ejes
    Eje pesado

    parkings Bandera para indicar si se desea obtener información de los estacionamientos al final de la ruta.

    user_id ID del usuario que desea guardar la ruta en su perfil.

    transport Método de transporte para la ruta. Tiene tres valores aceptados: "car" - automóvil
    "bicycle" - bicicleta
    "pedestrian" - peatón

    arrival_time Hora (UTC) de llegada de ruta en formato de 24 horas: HH:mm.

    geometry Si el valor es "polyline", las geometrías de la respuesta estarán codificadas en ese formato, de lo contrario serán enviadas en GeoJSON.