Información disponible

Red Nacional de Caminos

La API de Ruteo utiliza la Red Nacional de Caminos y todas sus especificaciones técnicas, para generar el resultado de acuerdo a las restricciones de circulación en el mundo real como sentidos de circulación vehicular, pasos a desnivel, distribuidores viales, enlaces, retornos glorietas, y maniobras prohibidas. Además, considera tres posibles rutas: preferentemente libre, preferentemente cuota y la ruta sugerida para dar alternativas de traslado o viaje con diferente coste.

Los datos espaciales en formato Shapefile (SHP), datos tabulares, metadatos y documentación técnica de la Red Nacional de Caminos en su versión más reciente, puede ser descargada de manera gratuita en el sitio de descargas de INEGI mediante la siguiente URL:

https://www.inegi.org.mx/app/buscador/default.html?q=red+nacional+de+caminos#tabMCcollapse-Indicadores


Ruteo en servicios de mapas de INEGI

Explore el ruteo en los sistemas de mapas del INEGI: Mapa Digital de México.

MDM: http://gaia.inegi.org.mx/mdm6



Condiciones de uso

1.- Los sistemas o aplicaciones deben hacer referencia a la API de Ruteo y al INEGI Instituto Nacional de Estadística y Geografía, tanto en su nombre como sus logotipos.

2.- De difundir los resultados en cualquier documento, reporte o medio de difusión, será obligación del usuario dar el crédito respectivo.

3.- Se deben hacer las siguientes aclaraciones sobre su funcionalidad.



Aclaraciones

a. La Red Nacional de Caminos es actualizada cada año y publicada el 15 de diciembre de ese mismo año. El grado de actualización estará sujeto a la disponibilidad de insumos al momento de su digitalización y a los objetivos considerados.

b. La base de datos de la API es actualizada con la versión más reciente de la Red Nacional de Caminos una vez que ha sido publicada el 15 de diciembre y en un plazo no mayor a una semana.

c. Las rutas generadas están condicionadas a las especificaciones técnicas de la Red Nacional de Caminos.

d. El tiempo estimado de traslado entre un origen y un destino, considera transitar en condiciones óptimas, de forma continua, sin semáforos, tráfico, inclemencias del clima, paradas por carga de combustible o cualquier factor que incremente el tiempo del viaje.

e. Las tarifas de peaje en casetas de autopistas, puentes o túneles, así como los precios de combustible, pueden diferir de los costos reales, debido al periodo que se requiere para su actualización en cada alza o cambio, aunado a la regionalización del costo de los combustibles.

f. Por lo general el incremento de tarifas de peaje se presenta en los primeros tres meses de cada año, pero por aniversario de operación de autopistas, los incrementos se presentan en el transcurso del año. Por tanto, la principal actualización en la RNC se realiza de enero a marzo, y se contempla sincronizarla en la API en tres tiempos: primera semana de abril, primera semana de julio, y primera semana de noviembre.

g. Tanto el producto espacial como el sistema son perfectibles, por lo que se contempla una actualización permanente orientada a la mejora continua.

h. Es responsabilidad del usuario el uso que se le pueda dar a los resultados de este simulador.


y las notas vigentes que se publiquen en cada actualización.

Guía para desarrolladores

1. Introducción

2. Audiencia

3. Métodos para obtener información a través de la API

4. Registro y solicitud de token


Introducción

Bienvenidos a la documentación para desarrolladores del API de Ruteo. El INEGI se une a la iniciativa de libre acceso con el objetivo de ampliar la disponibilidad de información para los usuarios.

Audiencia

Este documento está dirigido para los desarrolladores familiarizados con la programación Java Script y Sistemas de Información Geográfica para web.

Métodos para obtener información a través de la API

Funciones
FunciónParámetrosFuncionalidadRetoma
buscalineax, y, escala, tipo formato devueltoEncontrar línea más cercana en función de un bufferID, source, target y nombre de la línea, geometría
buscadestinoCadena texto, tipo formato devueltoBuscar un origen o destinoArreglo{ID y nombre del Destino}
optima, cuota, libreDatos de inicio y fin, tipo vehículo, ejes excedentes, barreras, tipo formato devueltoCalcular la rutaLínea de ruta, distancia, tiempo, costo de peaje, costo casetas, costo ejes excedentes
Detalle_o, detalle_c, detalle_lDatos de inicio y fin, tipo vehículo, ejes excedentes, barreras, tipo formato devueltoObtener el itinerario o detalle de la rutaArreglo de tramos de red {geometría, nombre, distancia, tiempo, costo de caseta, geometría punto caseta, costo eje excedente, giro}
combustibletipo formato devueltoRegresa los tipos combustible y sus costos promediosTipo, costo, tipo-costo

Nota:Los parámetros enviados deberán ser mediante el método POST.


Definiciones

Destino:Sitio de partida o llegada para una ruta. Están integrados por localidades, instalaciones de transporte como aeropuertos y puertos, así como sitios de interés contenidos en la Red Nacional de Caminos.

Línea:Es cualquier segmento de la Red Nacional de Caminos.

Token:Cadena de caracteres utilizada como clave de acceso por medio del parámetro key con una longitud igual a 36 caracteres, proporcionada por INEGI.


Búsqueda de Destinos

La búsqueda de destinos incluye aquellos registrados en la Red Nacional de Caminos como localidades urbanas y rurales, así como los sitios de interés que pueden ser instalaciones de servicios como aeropuertos, puertos, entre otros como servicios médicos, o centros educativos de nivel superior, así como sitios atractivos para el turismo como playas, cascadas, zonas arqueológicas, museos, pueblos mágicos, y muchos más. En cada actualización de la Red Nacional de Caminos, se definen líneas de trabajo para ampliar el universo de sitios, por lo que cada año serán incrementados.

Para hacer una búsqueda de destinos se utiliza la siguiente URL:

https://gaia.inegi.org.mx/sakbe_v3.1/buscadestino

Parámetros

Los parámetros son enviados mediante el método POST.

  • buscar: es una cadena de caracteres que define el nombre o parte del destino que desea encontrar. Se puede utilizar una coma para especificar la entidad federativa, p. e. “San Juan, Jalisco”.
  • proj: define la proyección que desea que se encuentren los puntos resultantes. GRS80 para coordenadas geográficas y MERC para coordenadas Spherical Mercator. Este parámetro es opcional, si se omite el valor por default será GRS80.
  • type: Tipo de formato a regresar (json o xml).
  • num: cantidad de destinos que desea sean devueltos.
  • key: Cadena única por usuario de 36 caracteres.
Resultado

Devolverá todos los destinos que el parámetro buscar coincida con su nombre o parte del mismo ordenados de mayor a menor frecuencia solicitada. Se puede utilizar una coma (,) para separar lo que desea encontrar y una entidad federativa en específico (esto puede ser la palabra completa, parte de ella o su abreviatura).

Si la palabra de búsqueda es cascada se obtendrá como resultado todas las cascadas del país. Si la palabra de búsqueda es cascada, jal se obtendrá como resultado todas las cascadas del estado de Jalisco.

  • id_dest: devuelve el identificador único del destino.
  • ent_abr: devuelve la abreviación de la entidad federativa en donde se encuentra el destino.
  • nombre:devuelve el nombre del destino.
  • geojson: devuelve la geometría del punto geográfico en formato geoJSON.
Ejemplo

Buscaremos los 15 destinos más buscados que coincidan con la palabra Durango, con una proyección GRS80 y formato JSON.

https://gaia.inegi.org.mx/sakbe_v3.1/buscadestino
{
buscar: ”Durango”,
type: “json”,
num:15,
key: "<token>"
}

Objeto de parámetros a enviar mediante el método POST, por ejemplo para la función $.post() de jquery.

JSON recibido

El API devolverá 3 objetos: data, meta y response.

El objeto data contiene los resultados, en este caso un arreglo de objetos con los destinos encontrados.

El objeto meta contiene la fuente

El objeto response contiene un atributo llamado succes donde contendrá true indicando que fue correcto el resultado o false indicando que ocurrió un error, además un mensaje en el atributo message donde se explica lo ocurrido en caso de existir un error o la plabra "OK" cuando es correcto el resultado.

XML recibido

El API devolverá una estructura XML como se muestra en la imagen, donde en la etiqueta contendrá los créditos de la misma.

Búsqueda de líneas

Para hacer una búsqueda de líneas en la red se utiliza la siguiente url:

https://gaia.inegi.org.mx/sakbe_v3.1/buscalinea

Parámetros

Los parámetros son enviados mediante el método POST.

  • escala: es el valor de la escala de visualización en la que se encuentra su mapa.
  • x: es el valor de la longitud de un punto dado en coordenadas geográficas (grados decimales) o Spherical Mercator (metros) dependiendo del valor del parámetro proj.
  • y: es el valor de la latitud de un punto dado en coordenadas geográficas (grados decimales) o Spherical Mercator (metros) dependiendo del valor del parámetro proj.
  • proj: es el tipo de sistema de referencia, entre los valores permitidos están GRS80 (Geográfica) y MERC (Spherical Mercator). Este parámetro es opcional, si se omite el valor por default será GRS80, y las coordenadas deberán de están en grados decimales.
  • type: Tipo de formato a regresar (json o xml).
  • key: Cadena única por usuario de 36 caracteres.

Resultado

Devolverá la línea más cercana a la coordenada enviada.

  • id_routing_net: identificador de la línea.
  • source: source de la línea.
  • target: target de la línea.
  • nombre: Nombre de la línea (carretera, camino o avenida).
  • geojson: geometría de un punto de la línea más cercano a las coordenadas enviadas.

Ejemplo

Para una escala de visualización de 1:10000 sobre las coordenadas 32.4952798422821 de latitud y -117.121925383366 de longitud.

https://gaia.inegi.org.mx/sakbe_v3.1/buscalinea
{
type: “json”,
escala: 10000,
x: -117.121925383366,
y: 32.4952798422821,
key:“<token>”
}

Objeto de parámetros a enviar mediante el método POST, por ejemplo para la función $.post() de jquery.

En caso de utilizar la proyección Spherical Mercator deberá de incluir el parámetro proj con el valor MERC y los parámetros x y y deberán estar expresados en metros.

Cálculo de Rutas

Para hacer el cálculo de rutas existen 3 tipos: óptima, preferentemente cuota y preferentemente libre, y se utilizan las siguientes URLs:

https://gaia.inegi.org.mx/sakbe_v3.1/libre
https://gaia.inegi.org.mx/sakbe_v3.1/cuota
https://gaia.inegi.org.mx/sakbe_v3.1/optima

Parámetros

Los parámetros son enviados mediante el método POST.

  • id_i: identificador (id_rounting_net) de la línea de inicio. *
  • source_i: valor del source de la línea de inicio. *
  • target_i: valor del target de la línea de inicio. *
  • id_f: identificador (id_rounting_net) de la línea final. *
  • source_f: valor del source de la línea final. *
  • target_f: valor del target de la línea final. *
  • dest_i: identificador del destino de inicio. **
  • dest_f: identificador del destino final. **
  • v: especifica el tipo de vehículo (ver tabla 2).
  • e: especifica el número de ejes excedentes. Es opcional, si se omite el valor por default será 0 (ver tabla 3).
  • b: cadena de caracteres que especifica los id_routing_net de las líneas separado por comas, líneas por las cuales la ruta no pasará por algún motivo. Ej. “12865,3659,658,12546”. Este parámetro es opcional.
  • proj: es el tipo de sistema de referencia, entre los valores permitidos están GRS80 (Geográfica) y MERC (Spherical Mercator). Este parámetro es opcional, si se omite el valor por default será GRS80, y la geometría de la ruta obtenida estará en grados decimales.
  • type: Tipo de formato a regresar (json o xml).
  • key: Cadena única por usuario de 36 caracteres.

* Parámetro opcional, aplica solo si se trata de una línea.

** Parámetro opcional, aplica solo si se trata de un destino.


P=Descripción
0Preferentemente libre
1Preferentemente cuota
2Ruta sugerida

Tabla 1

v=Descripción
0Motocicleta
1Automóvil
2Autobús dos ejes
3Autobús tres ejes
4Autobús cuatro ejes
5Camión dos ejes
6Camión tres ejes
7Camión cuatro ejes
8Camión cinco ejes
9Camión seis ejes
10Camión siete ejes
11Camión ocho ejes
12Camión nueve ejes

Tabla 2

e=Descripción
0Sin ejes excedentes
1un eje excedente
2dos ejes excedentes
3tres ejes excedentes
4cuatro ejes excedentes
5cinco ejes excedentes

Tabla 3

Resultado

Devolverá los valores de la ruta.


  • long_km: devuelve la longitud en kilómetros de la ruta.
  • tiempo_min: devuelve el tiempo promedio en minutos de traslado de la ruta.
  • peaje: devuelve f si la ruta no pasa por alguna caseta de cobro y t si pasa por al menos una.
  • costo_caseta: devuelve la cantidad en pesos que pagará al transitar por esta ruta.
  • eje_excedente: devuelve la cantidad en pesos que pagaría al transitar por esta ruta en caso que el parámetro e sea mayor o igual a 1. Si e es igual a cero, no se devolverá este resultado.
  • geojson: devuelve la línea de la ruta en formato geoJSON.
  • advertencia: devuelve una advertencia cuando la ruta tiene algunas características específicas que el usuario debiera conocer.
Ejemplos

Existen 4 formas de calcular rutas:

JSON y XML recibido
Obtención del detalle de la ruta

El detalle de la ruta se compone de una secuencia de elementos viales, agrupados por el tipo de vialidad, código de carretera y nombre, así como la distancia por recorrer.

Para obtener el detalle de la ruta se utiliza las siguientes URLs:

https://gaia.inegi.org.mx/sakbe_v3.1/detalle_o Detalle de la ruta optima

https://gaia.inegi.org.mx/sakbe_v3.1/detalle_c Detalle de la ruta preferentemente cuota

https://gaia.inegi.org.mx/sakbe_v3.1/detalle_l Detalle de la ruta preferentemente libre


Parámetros

Se utilizarán los mismos parámetros del cálculo de ruta , bajo las mismas reglas para las 4 formas de consulta.


Resultado

Devolverá los datos de los segmentos que integran su ruta y una geometría de tipo punto que estará ubicada al inicio de cada segmento, así como también el costo de peaje en el caso que ese segmento cruce una caseta de cobro.

  • direccion: Dirección de giro y nombre de la carretera, camino o vialidad.
  • long_m: Longitud del segmento en metros.
  • tiempo_min: Tiempo de recorrido del segmento en minutos.
  • costo_caseta:Cantidad en pesos a pagar por transitar por el segmento.
  • punto_caseta: Geometría en formato geoJson de la caseta asociada al segmento (en caso de existir una asociación).
  • eje_excedente: Cantidad en pesos a pagar por los ejes excedentes.
  • giro: Valor numérico que indica hacia donde se debe girar.
Giro
0Continúe derecho
1Gire a la izquierda
2Gire a la derecha
3Gire ligeramente a la izquierda
4Gire ligeramente a la derecha

Ejemplo

Por ejemplo, si realiza una ruta de destino a destino de preferentemente cuota y sin barreras deberá obtener el detalle de la siguiente manera:

Tipo de petición:

https://gaia.inegi.org.mx/sakbe_v3.1/detalle_c
https://gaia.inegi.org.mx/sakbe_v3.1/detalle_o
https://gaia.inegi.org.mx/sakbe_v3.1/detalle_l

Parámetros

{
dest_i: 3345,
dest_f: 222,
v:1,
type:"json",
proj:"MERC"
key:“<token>”
}
Datos de los dos destinos(id_dest) obtenidos mediante la función buscadestino.
JSON y XML recibido

NOTA: Cabe aclarar que esta función puede y debe ser ejecutada en paralelo con la función de cálculo de ruta para su mayor eficiencia en los tiempos de ejecución.

Por ejemplo, si quiere obtener la ruta optima y la ruta libre debe lanzar al mismo tiempo las siguientes 4 funciones: optima, detalle_o, libre y detalle_l.



Tipos de combustibles

Retorna 4 tipos de combustibles más comunes y su costo promedio que se consultan el primer día hábil de cada semana en la página web de la Comisión Reguladora de Energía del Gobierno Federal: https://www.gob.mx/cre

Debido a la liberación de los precios de la gasolina al inicio de 2017, donde el precio está condicionado a la ubicación de las estaciones de servicio en las 90 regiones en las que ha sido dividido el País, además de los ajustes que se estén dando a lo largo del año, el dato que provee esta API solo es una referencia en función del precio promedio nacional excluyendo las 7 regiones sobre la frontera. También lo que refiere al gas LP el precio es un promedio ponderado que publica la Comisión Reguladora de Energía. A partir del 30 de noviembre de 2017 se liberaron los precios de las gasolinas lo que dificulta estimar un promedio, por tanto, se estarán mostrando los precios a esta fecha hasta que se tenga una fuente confiable de consulta. Se sugiere para la interface la opción de que el usuario registre el costo que el considere conveniente para su estimación.


https://gaia.inegi.org.mx/sakbe_v3.1/combustible


Parámetros

Los parámetros son enviados mediante el método POST.

  • type: Tipo de formato a regresar (json o xml).
  • key: Cadena única por usuario de 36 caracteres.
Resultado
  • tipo_costo: Tipo y costo promedio del combustible.
  • costo: Costo promedio del combustible.
  • tipo: Nombre del combustible.

https://gaia.inegi.org.mx/sakbe_v3.1/combustible

{

type:"json",

key:“<token>”

}

JSON y XML recibido
Registro y solicitud del token

Se otorga el token de manera automatizada y de forma inmediata vía correo electrónico una vez que han sido registrados los datos del usuario y un correo válido. Estos datos son importantes para proveerles información de actualizaciones de este sistema o para fines de notificación de alguna ventana de tiempo para mantenimiento de servidores.

https://gaia.inegi.org.mx/sakbe_v3.1/genera_token.jsp

Una vez registrados los datos oprimir el botón “Generar Token” y le será enviado el token, key o llave por correo electrónico, que deberá utilizar en cada una de las peticiones hacia la API.

Se permite un solo registro de correo electrónico. Si intenta registrarse nuevamente recibirá a su correo el token generado anteriormente.

Ejemplos
Ruteo
Búsqueda
Ruteo
<!DOCTYPE html>
<html>
	<head>
		<Title> Rutas - API </title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<link rel="stylesheet" type="text/css" href="CSS/CSS.css">
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
		<script src="https://www.openlayers.org/api/OpenLayers.js"></script>		
		<script src="js/sakbe.js"></script>
	</head>
		
       <body onload="init()" >
       <id="map"> </div >
       <div class="sakbe" id="sakbe" >
      
	<div >	Origen <input id="origen" type="text" / ></div >
	<div >Destino <input id="destino" type="text" / > </div >
	<div id="resultado" > <b >Dando click en el mapa, seleccione dos Carreteras o vialidades y espera a que se muestre la ruta </b > </div >
	
		
	 </div >	  
	  <img  id="cargando" class="hidden" src="img/cargando.gif" width="70px" height="70px"/ >
		</body>
</html>
            
	
  var aProj = new OpenLayers.Projection("EPSG:4326");
   var deProj = new OpenLayers.Projection("EPSG:900913");
    var id_i=0;
	  var map, layer;
	  var style_ruta = {
                strokeColor: "#0000EE",
                strokeWidth: 6,
                strokeDashstyle: "solid",
                pointRadius: 15,
                pointerEvents: "visiblePainted",				
                title: "Ruta Sugerida",
				strokeOpacity: 0.5
            };			
       var vector_layer = new OpenLayers.Layer.Vector('Ruta',{style: style_ruta}); 	 
  OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                
                defaultHandlerOptions: {
                    'single': true,
                    'double': false,
                    'pixelTolerance': 0,
                    'stopSingle': false,
                    'stopDouble': false
                },

                initialize: function(options) {
                    this.handlerOptions = OpenLayers.Util.extend(
                        {}, this.defaultHandlerOptions
                    );
                    OpenLayers.Control.prototype.initialize.apply(
                        this, arguments
                    ); 
                    this.handler = new OpenLayers.Handler.Click(
                        this, {
                            'click': this.trigger
                        }, this.handlerOptions
                    );
                }, 

                trigger: function(e) {              
					var lonlat = map.getLonLatFromPixel(e.xy);					
                    var escala = map.getScale();                 
                    EncuentraRoad(lonlat.lat,lonlat.lon,escala);             
                }

            });
  
          
		
 function init(){    
            map = new OpenLayers.Map( 'map',{                              
                controls: [
			new OpenLayers.Control.ScaleLine(),                
             		new OpenLayers.Control.MousePosition(),
                        new OpenLayers.Control.Navigation(),                                          
                        new OpenLayers.Control.KeyboardDefaults()
                    ],
		    projection: new OpenLayers.Projection('EPSG:900913'),
                    displayProjection: new OpenLayers.Projection("EPSG:4326"),
                    numZoomLevels: 21		  
              });			  						
          	     base1 = new OpenLayers.Layer.WMS( "Mapa Base",
                  "http://gaiamapas1.inegi.org.mx/mdmCache/service/wms?",				
                  {layers: 'MapaBaseTopograficov61_consombreado'},
                  {isBaseLayer: 'true' } );
		    
		  
		   vector_puntos_ruta = new OpenLayers.Layer.Vector("Puntos Ruta", {
								styleMap: new OpenLayers.StyleMap({
									"default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
										externalGraphic: "img/punto.png",
										graphicOpacity: 1,
										rotation: 0,
										pointRadius: 20,
										graphicYOffset: -37,
										graphicXOffset: -18
									}, OpenLayers.Feature.Vector.style["default"]))
									
								})
							});       
         map.addLayers([base1,vector_puntos_ruta]);                                   
         navigator.geolocation.getCurrentPosition(PermitirUbicacion,NoUbicacion);    
 
}      ///////////////// TERMINA FUNCION Init()
  
function PermitirUbicacion(pos){     
    IrPosicion(pos.coords.longitude, pos.coords.latitude);
}
function NoUbicacion(pos){    
    IrPosicion(-104.62426,24.03606);
}
function IrPosicion(lat,lon){ 
     map.setCenter(
            new OpenLayers.LonLat(lat,lon).transform(new OpenLayers.Projection("EPSG:4326"),map.getProjectionObject()), 4
    ); 
	  var click = new OpenLayers.Control.Click();
            map.addControl(click);
            click.activate();   
  }
  
 
function EncuentraRoad(y,x,escala)
    {		 
    var datos = {
        type: "json",       
       key: "kqvCNH1V-keUF-rSVa-O1tf-gdqFN6DynMNN",
        proj: "MERC", 
        escala:escala,
        y:y,//latitud
        x:x//longitud  
    };
		var geojson; 
    try{
    $.post("https://gaia.inegi.org.mx/sakbe_v3.1/buscalinea", datos, function (obj) {       
               geojson = $.parseJSON(obj.data.geojson);    
              var geojson_punto = new OpenLayers.Format.GeoJSON();				   
               if (id_i==0){
						id_i=obj.data.id_routing_net;
						source_i=obj.data.source;
						target_i=obj.data.target;
						$("#origen").val(obj.data.nombre);                             			
                         vector_puntos_ruta.addFeatures(geojson_punto.read(geojson)); 										
                   }else{
				        id_f=obj.data.id_routing_net;
						source_f=obj.data.source;
						target_f=obj.data.target;
						$("#destino").val(obj.data.nombre);   												
                         vector_puntos_ruta.addFeatures(geojson_punto.read(geojson)); 					             				
						rutear();					
						}		                    			  				  		 
	        });	    		   
        } catch (err)
        {
            alert("Ha ocurrido un error: " + err.message);
        }	
 } 
  
function rutear()
  {               	 
       map.addLayer(vector_layer);	  
       datos = {type: "json", key: "kqvCNH1V-keUF-rSVa-O1tf-gdqFN6DynMNN", proj: "MERC", id_i:id_i, source_i: source_i, target_i: target_i, id_f: id_f, source_f: source_f, target_f: target_f, v: 2, e: 0};
	   $("#cargando").removeClass("hidden");
       rutaSugerida(datos);
	  detalleSugerida(datos);
  }
  
 function rutaSugerida(datos){
     var geojson_format = new OpenLayers.Format.GeoJSON();
    $.post("https://gaia.inegi.org.mx/sakbe_v3.1/optima",
            datos,
            function (obj) {		
       		var codHtml=" <table style='color: white' > <tr > < td > < b > Distancia: < b > ; < /td > < td > "+obj.data.long_km+" km >/td </tr >"+
		                    " <tr > <td > <b >Tiempo: </b > </td > <td >"+obj.data.tiempo_min+" min </td > </tr >"+
							" <tr > <td > <b >Costo Casetas: </b > </td > <td >$ "+obj.data.costo_caseta+" </td ></tr ></table >";        
							$("#resultado").html(codHtml);	
                              vector_layer.addFeatures(geojson_format.read(obj.data.geojson));
                              map.zoomToExtent(vector_layer.getDataExtent());							  
			});			
}   

function  detalleSugerida(datos){
	 $.post("https://gaia.inegi.org.mx/sakbe_v3.1/detalle_o",
            datos,
            function (obj) {		
       	    /*    obj.data       Es un vector de objetos con N posiciones, para ver el resultado de este vector antes de ejecutar una ruta abra las herramientas del desarrollador en su navegador y elija la pestaña de Network o Red 
                 
				 
				 En este espacio deberá de usar los datos del vector obj.data   
			*/
					$("#cargando").addClass("hidden");
			});
}

	  
	  
Para descargar el ejemplo completo aquí.
Búsqueda
     <html >
     <head>
    <title>Buscar Destinos - API </title>
    <meta charset="utf-8">	
		<script src="js/jquery-1.11.1.min.js" type="text/javascript"></script>
		<script src="js/apiSakbeJson.js"></script>
		<style>
		input{
		 font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
		 width:250px;
		}
		
		#titulo{
		 font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
		 
		}
		
		.lista{		
		width: 100%;
		height: 245px;	
		overflow-y: auto;   		
		}
		
		
		</style >
		
	</head>
	<body>
	     
	     <img src="img/Logo_transp_sakbe.png" />Buscar Localidades o Sitios de interés para el turismo </p> </b>
		<div>
				<input  type="text" placeholder="Buscar... " id="busqueda" onchange="buscarDestino(this.value);" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();" />						
		</div >		
		<div class="lista" id="lista">	
		</div>		
	 </body>
</html>

   
		 
		 var servidor = "https://gaia.inegi.org.mx/sakbe_v3.1/";

            function buscarDestino(valor){
            if (valor.length>3)   
            {
	       $.post(servidor+"buscadestino",
              {
			type:"json",	
			buscar: valor,		
			proj: "MERC",
			num:15,
			key: "x4cGBaOC-423Z-A9ii-AKwM-QWiCfq63rMu9"
                },
              function( json ){  		             
					  var codHtml = '<table >';
					  for(var i = 0; i < json.data.length; i++){
					  codHtml +='<tr > <td style="width:60px" >'+json.data[i].id_dest+' <td ><td >'+json.data[i].nombre+' <td%gt;<tr >';	
                  }
             $('#lista').html(codHtml);
	       }); 	
	     }		
          }
		 
		 
		 
		 
Para descargar el ejemplo completo aquí.