<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Google &#8211; Alejandro Franco</title>
	<atom:link href="https://jafrancov.com/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>https://jafrancov.com</link>
	<description>Python, Django y lo que nadie explica en los tutoriales</description>
	<lastBuildDate>Wed, 13 Nov 2013 05:41:19 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">14205669</site>	<item>
		<title>Buscar y trazar rutas con GMaps API v3</title>
		<link>https://jafrancov.com/2011/12/trazar-rutas-gmaps-api-v3/</link>
					<comments>https://jafrancov.com/2011/12/trazar-rutas-gmaps-api-v3/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Fri, 16 Dec 2011 19:41:28 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Direcciones]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Rutas]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=2143</guid>

					<description><![CDATA[Si no tienes mucha experiencia o tienes dudas con respecto a algo que usemos en este post, puedes consultar los demás ejemplos que se han realizado anteriormente aquí. En esta ocasión veremos un ejemplo buscado por muchos, y que puede llegar a tener gran utilidad dependiendo de nuestra aplicación, estamos hablando de trazar rutas&#8230; dije ... <a title="Buscar y trazar rutas con GMaps API v3" class="read-more" href="https://jafrancov.com/2011/12/trazar-rutas-gmaps-api-v3/" aria-label="Leer más sobre Buscar y trazar rutas con GMaps API v3">Leer más</a>]]></description>
										<content:encoded><![CDATA[<p>Si no tienes mucha experiencia o tienes dudas con respecto a algo que usemos en este post, <a href="http://jafrancov.com/tag/gmaps">puedes consultar los demás ejemplos que se han realizado anteriormente aquí</a>.</p>
<p>En esta ocasión veremos un ejemplo buscado por muchos, y que puede llegar a tener gran utilidad dependiendo de nuestra aplicación, estamos hablando de trazar rutas&#8230; dije ¿rutas?, si, rutas, direcciones, un pequeño GPS en web.</p>
<p>Lo que haremos es bastante sencillo de entender y lo pondremos de la manera más básica, esto para darte la amplitud a que lo mejores y le pongas la cara que desees.</p>
<p>El proceso es entendido por todos, es proporcionar 2 puntos, un origen y un destino, a partir de esto, que nos proporcione una ruta para ir de un lado a otro. Sin más preámbulo manos a la obra.</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/routes-directions" target="_blank"><img decoding="async" class="alignnone" title="Ver Demo Trazar Rutas" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Single InfoWindow" width="140" height="57" /></a></p>
<p>Lo primero (siempre usaremos los scripts de jQuery y GMaps) que haremos será crear el html sobre el cuál vamos a trabajar, para esto solamente requerimos 2 cajas de texto para escribir el origen y el destino, un botón para ejecutar el proceso, 2 combobox donde uno será para elegir el modo de viaje (auto, bicicleta, caminando) y el otro para elegir el sistema de medición (Métrico -mts, Km-, Imperial -ft, Mi-), por último 2 divs, uno para el espacio del mapa y otro para el panel de direcciones.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
	&lt;label for=&quot;origen&quot;&gt;Origen&lt;/label&gt;
	&lt;input type=&quot;text&quot; name=&quot;origen&quot; id=&quot;origen&quot; placeholder=&quot;calle, ciudad, estado...&quot; /&gt;
	&lt;br /&gt;
	&lt;label for=&quot;destino&quot;&gt;Destino&lt;/label&gt;
	&lt;input type=&quot;text&quot; name=&quot;destino&quot; id=&quot;destino&quot; placeholder=&quot;calle, ciudad, estado...&quot; /&gt;
	&lt;br /&gt;
	&lt;input type=&quot;button&quot; id=&quot;buscar&quot; value=&quot;Buscar ruta&quot;  /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;Opciones&lt;/h3&gt;
&lt;div id=&quot;rutaOps&quot;&gt;
	&lt;select id=&quot;modo_viaje&quot; class=&quot;opciones_ruta&quot;&gt;
		&lt;option value=&quot;DRIVING&quot; selected=&quot;selected&quot;&gt;Auto&lt;/option&gt;
      	&lt;option value=&quot;BICYCLING&quot;&gt;Bicicleta&lt;/option&gt;
      	&lt;option value=&quot;WALKING&quot;&gt;Caminando&lt;/option&gt;
  	&lt;/select&gt;
  	&lt;select id=&quot;tipo_sistema&quot; class=&quot;opciones_ruta&quot;&gt;
      	&lt;option value=&quot;METRIC&quot; selected=&quot;selected&quot;&gt;Métrico&lt;/option&gt;
      	&lt;option value=&quot;IMPERIAL&quot;&gt;Imperial&lt;/option&gt;
  	&lt;/select&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
	&lt;div id=&quot;map_canvas&quot; style=&quot;float:left; width:70%; height:500px&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;panel_ruta&quot; style=&quot;float:right; overflow: auto; width:30%; height: 500px&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Una vez que tenemos el HTML nos enfocaremos en el la API y JS completamente, declaramos 2 objetos globales, uno es <em>DirectionsRenderer</em> y otro es <em>DirectionsService</em>. El primero nos dará las herramientas necesarias para que visualicemos en el navegador toda la información obtenida, el segundo es el servicio que buscará en las bases de datos de Google Maps tanto los puntos como la(s) rutas existentes.</p>
<pre class="brush: jscript; title: ; notranslate">
var directionsDisplay = new google.maps.DirectionsRenderer();
var directionsService = new google.maps.DirectionsService();
</pre>
<p>Una vez hecho esto, escribimos el código para ya tener inicializado y dibujado el mapa en nuestra página, creamos una función con el nombre que nosotros queramos, dentro de ella, vamos a colocar lo siguiente:</p>
<pre class="brush: jscript; title: ; notranslate">
var request = {
 origin: $('#origen').val(),
 destination: $('#destino').val(),
 travelMode: google.maps.DirectionsTravelMode&#x5B;$('#modo_viaje').val()],
 unitSystem: google.maps.DirectionsUnitSystem&#x5B;$('#tipo_sistema').val()],
 provideRouteAlternatives: true
 };
</pre>
<p>Línea por línea:</p>
<ol>
<li>Declaramos una variable con las opciones con las que se va a solicitar la información al objeto <em>DirectionsServices</em>, lo siguiente son parámetros para hacer la búsqueda de acuerdo a los datos introducidos.</li>
<li>A <em>origin</em> se le asigna el valor de  la caja de texto <em>origen</em> estableciendo el punto de partida de la ruta.</li>
<li>A <em>destination</em> se le asigna el valor de la caja de texto <em>destino</em> con el que se especifica el punto final de la ruta.</li>
<li>En la opción <em>travelMode</em> se asigna la opción elegida para el modo de viaje (<em>modo_viaje</em>), por esta razón en el valor de cada opción se definió de acuerdo al valor asignado en la API.</li>
<li>unitSystem se refiere al tipo de unidades que se utilizarán para mostrar distancias, obteniendo el valor del <em>tipo_sistema</em>.</li>
<li>Con la opción provideRouteAlternatives establecemos en verdadero o falso (por default <em>false</em>), para indicar que puede ofrecernos más resultados para las rutas (rutas alternativas).</li>
</ol>
<p>Una vez declarada la variable con el arreglo de los parámetros, con unas cuántas líneas vamos a hacer la solicitud y plasmar el resultado:</p>
<pre class="brush: jscript; title: ; notranslate">
directionsService.route(request, function(response, status) {
	if (status == google.maps.DirectionsStatus.OK) {
		directionsDisplay.setMap(map);
		directionsDisplay.setPanel($(&quot;#panel_ruta&quot;).get(0));
		directionsDisplay.setDirections(response);
	} else {
	        alert(&quot;No existen rutas entre ambos puntos&quot;);
	}
});
</pre>
<p>Recordemos que al inicio declaramos 2 objetos, teniendo en cuenta su función, les explico línea a línea:</p>
<ol>
<li><em>directionsService.route</em> hace la solicitud a la API con los datos que previamente establecimos (<em>request</em>), creamos una una función interna, que recibe los parámetros de respuesta (<em>response</em>) que es donde vendrían contenidos los datos y un estatus (<em>status</em>) que indica si fue exitosa la solicitud.</li>
<li>Si el estatus es <em>OK</em> procedemos, si no, mandamos un mensaje de error diciendo que no se pudo encontrar ruta entre ambos puntos. Existe una serie de estatus distintos, sin embargo y para efectos prácticos solamente usamos aquí el OK (para ver más tipos de status, hay que ir directamente a la documentación de la API).</li>
<li><em>directionsDisplay.setMap(map)</em> establece el mapa sobre el cuál será trazada la ruta, la variable <em>map</em> debe ser un objeto tipo <a title="Primeros pasos con la API v3 de Google Maps (Mapa y Marcador)" href="http://jafrancov.com/2010/08/bases-gmaps-api-v3/" target="_blank">Mapa</a>, además de global.</li>
<li><em>directionsDisplay.setPanel($(&#8220;#panel_ruta&#8221;).get(0))</em> indica dónde van a ser escritas las indicaciones de la ruta, aquí es necesario indicar un div disponible (<em>panel_ruta</em>).</li>
<li>directionsDisplay.setDirections(response) hace la magia, imprime en el mapa la ruta y escribe las indicaciones de acuerdo a las 2 instrucciones anteriores.</li>
</ol>
<p>Por último solamente creamos un par de funciones para que al hacer click en el botón busque la ruta o la redibuje si se eligen diferentes opciones, esto es opcional, si no lo quieren así hay que hacer que indicar que al hacer click, la función central se ejecute, para mi caso, la función la llamé <em>rockAndRoll</em>  😀</p>
<pre class="brush: jscript; title: ; notranslate">
$('#buscar').live('click', function(){
	rockAndRoll();
});

$('.opciones_ruta').live('change', function(){
	rockAndRoll();
});
</pre>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/routes-directions" target="_blank"><img decoding="async" title="Ver Demo Trazar Rutas" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Single InfoWindow" width="140" height="57" /></a></p>
<p>Es todo por esta ocasión, espero les ayude en sus proyectos o simplemente para jugar un rato, si quieren verlo en función denle click en el botón verde, dudas y comentarios son bien recibidos, o pueden encontrarme en twitter @<a href="http://twitter.com/jafrancov" target="_blank">jafrancov</a></p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2011/12/trazar-rutas-gmaps-api-v3/feed/</wfw:commentRss>
			<slash:comments>101</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2143</post-id>	</item>
	</channel>
</rss>
