<?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>GMaps &#8211; Alejandro Franco</title>
	<atom:link href="https://jafrancov.com/tag/gmaps/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>Tue, 19 Nov 2013 22:49:00 +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>Geocode Inverso: Buscar direcciones a partir de Coordenadas con GMaps API v3</title>
		<link>https://jafrancov.com/2012/10/reverse-geocode/</link>
					<comments>https://jafrancov.com/2012/10/reverse-geocode/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Tue, 30 Oct 2012 22:46:03 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Direcciones]]></category>
		<category><![CDATA[Geocode]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[Maps]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=2190</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 un post anterior, vimos cómo hacer un Geocode Simple, donde obteníamos las coordenadas a partir de una dirección dada, es decir, podríamos poner cualquier combinación de calles, ... <a title="Geocode Inverso: Buscar direcciones a partir de Coordenadas con GMaps API v3" class="read-more" href="https://jafrancov.com/2012/10/reverse-geocode/" aria-label="Leer más sobre Geocode Inverso: Buscar direcciones a partir de Coordenadas 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 un post anterior, vimos cómo hacer un <a title="Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) con GMaps API v3" href="http://jafrancov.com/2011/06/geocode-gmaps-api-v3/">Geocode Simple</a>, donde obteníamos las coordenadas a partir de una dirección dada, es decir, podríamos poner cualquier combinación de calles, colonias, ciudad, etc. y obtener las coordenadas de esa dirección para colocarlas en un mapa. En este caso es al contrario,<strong> buscar direcciones (de acuerdo a la base de datos de Google) a partir de coordenadas</strong>.</p>
<p>Lo que haremos se resume en: escribir coordenadas (latitud, Longitud), verificar si existe, si existe, colocar un marcador, centrar y dar zoom en el mapa en la región de la dirección obtenida, si no existe la dirección arrojar un error diciendo que no existe.</p>
<p><a href="http://gmaps.alexfranco.mx/reverse-geocode"><img decoding="async" class="aligncenter" title="Ver Demo Geocoding" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Geocoding" width="140" height="57" /></a></p>
<p>Al igual que el ejemplo anterior, es necesario crear un objeto Geocoder, que nos permitirá hacer la interpretación de lo que intentemos buscar.</p>
<pre class="brush: jscript; title: ; notranslate">var geocoder = new google.maps.Geocoder();</pre>
<p>El objeto que se obtiene de respuesta es un JSON, donde lo manejaríamos como regularmente se hace en javascript, el resultado es algo como esto:</p>
<pre class="brush: jscript; title: ; notranslate">
{
  &quot;status&quot;: &quot;OK&quot;,
  &quot;results&quot;: &#x5B; {
    &quot;types&quot;: &#x5B; &quot;street_address&quot; ],
    &quot;formatted_address&quot;: &quot;1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA&quot;,
    &quot;address_components&quot;: &#x5B; {
      &quot;long_name&quot;: &quot;1600&quot;,
      &quot;short_name&quot;: &quot;1600&quot;,
      &quot;types&quot;: &#x5B; &quot;street_number&quot; ]
    }, {
      &quot;long_name&quot;: &quot;Amphitheatre Pkwy&quot;,
      &quot;short_name&quot;: &quot;Amphitheatre Pkwy&quot;,
      &quot;types&quot;: &#x5B; &quot;route&quot; ]
    }, {
      &quot;long_name&quot;: &quot;Mountain View&quot;,
      &quot;short_name&quot;: &quot;Mountain View&quot;,
      &quot;types&quot;: &#x5B; &quot;locality&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;California&quot;,
      &quot;short_name&quot;: &quot;CA&quot;,
      &quot;types&quot;: &#x5B; &quot;administrative_area_level_1&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;United States&quot;,
      &quot;short_name&quot;: &quot;US&quot;,
      &quot;types&quot;: &#x5B; &quot;country&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;94043&quot;,
      &quot;short_name&quot;: &quot;94043&quot;,
      &quot;types&quot;: &#x5B; &quot;postal_code&quot; ]
    } ],
    &quot;geometry&quot;: {
      &quot;location&quot;: {
        &quot;lat&quot;: 37.4219720,
        &quot;lng&quot;: -122.0841430
      },
      &quot;location_type&quot;: &quot;ROOFTOP&quot;,
      &quot;viewport&quot;: {
        &quot;southwest&quot;: {
          &quot;lat&quot;: 37.4188244,
          &quot;lng&quot;: -122.0872906
        },
        &quot;northeast&quot;: {
          &quot;lat&quot;: 37.4251196,
          &quot;lng&quot;: -122.0809954
        }
      }
    }
  } ]
}
</pre>
<p>Lo único que nos faltaría es el código para validar, interpretar y dibujar. Para esto, hay 3 cosas importantes que debemos tomar en cuenta del JSON que tenemos de respuesta:</p>
<ul>
<li><em>status</em>: contiene la respuesta del estado de la petición, si fue satisfactoria o si hubo algún error y que tipo de error.</li>
<li><em>geometry.location</em>: la ubicación de la dirección solicitada.</li>
<li><em>geometry.viewport</em>: los límites recomendados para ajustar el zoom del mapa, haciendo un cuadrante con las esquinas Noreste (superior derecha) y Suroeste (inferior izquierda).</li>
</ul>
<p>Con esto en presente, la función siguiente nos mostrará solamente el primer resultado obtenido, quedando así :</p>
<pre class="brush: jscript; title: ; notranslate">
function codeLatLng() {
   var input = $('#latlng').val();
   var latlngStr = input.split(',', 2);
   var lat = parseFloat(latlngStr&#x5B;0]);
   var lng = parseFloat(latlngStr&#x5B;1]);
   var latlng = new google.maps.LatLng(lat, lng);
   geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
         if (results&#x5B;0]) {
            map.fitBounds(results&#x5B;0].geometry.viewport);
            marker.setMap(map);
            marker.setPosition(latlng);
            $('#address').text(results&#x5B;0].formatted_address);
            infowindow.setContent(results&#x5B;0].formatted_address);
            infowindow.open(map, marker);
            google.maps.event.addListener(marker, 'click', function(){
               infowindow.setContent(results&#x5B;0].formatted_address);
               infowindow.open(map, marker);
            });
         } else {
            alert('No results found');
         }
      } else {
         alert('Geocoder failed due to: ' + status);
      }
   });
}
</pre>
<p>Los primeros 4 renglones de la función realizan la validación y separación de latitud y longitud, para poder formar el objeto latLng, y listo con esto tenemos terminado nuestro ejercicio, puedes verificarlo en funcionamiento en la página de demos:</p>
<p><a href="http://gmaps.alexfranco.mx/reverse-geocode"><img decoding="async" class="aligncenter" title="Ver Demo Geocoding" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Geocoding" width="140" height="57" /></a></p>
<p>El código completo quedaría así:</p>
<pre class="brush: jscript; title: ; notranslate">
var geocoder;
var map;
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker();

function closeInfoWindow() {
      	infowindow.close();
   }

function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(20.68009, -101.35403);
  var mapOptions = {
    zoom: 8,
    center: latlng,
    mapTypeId: 'roadmap'
  }
  map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

  google.maps.event.addListener(map, 'click', function(){
        	closeInfoWindow();
     	  });
}

function codeLatLng() {
  var input = $('#latlng').val();
  var latlngStr = input.split(',', 2);
  var lat = parseFloat(latlngStr&#x5B;0]);
  var lng = parseFloat(latlngStr&#x5B;1]);
  var latlng = new google.maps.LatLng(lat, lng);
  geocoder.geocode({'latLng': latlng}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (results&#x5B;0]) {
		map.fitBounds(results&#x5B;0].geometry.viewport);
                marker.setMap(map);
                marker.setPosition(latlng);
		$('#address').text(results&#x5B;0].formatted_address);
		infowindow.setContent(results&#x5B;0].formatted_address);
        infowindow.open(map, marker);
		google.maps.event.addListener(marker, 'click', function(){
            infowindow.setContent(results&#x5B;0].formatted_address);
	        infowindow.open(map, marker);
        });
      } else {
        alert('No results found');
      }
    } else {
      alert('Geocoder failed due to: ' + status);
    }
  });
}

$(document).ready(function(){
   initialize();
});
</pre>
<p>Y en el Body solamente esto:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
   &lt;input id=&quot;latlng&quot; type=&quot;textbox&quot; value=&quot;20.68009, -101.35403&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
   &lt;input type=&quot;button&quot; value=&quot;Reverse Geocode&quot; onclick=&quot;codeLatLng()&quot;&gt;
&lt;/div&gt;
&lt;table class=&quot;width2&quot;&gt;
   &lt;tr&gt;&lt;td class=&quot;unitx1&quot;&gt;&lt;strong&gt;Dirección:&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;div id=&quot;address&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;div id=&quot;map_canvas&quot; style=&quot;width: 990px; height: 500px&quot;&gt;&lt;/div&gt;
</pre>
<p>Espero les sirva y cualquier cosa, ya saben cómo contactarme&#8230;</p>
<p style="text-align: right;"><em>Enjoy this Life!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2012/10/reverse-geocode/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2190</post-id>	</item>
		<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>
		<item>
		<title>Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) con GMaps API v3</title>
		<link>https://jafrancov.com/2011/06/geocode-gmaps-api-v3/</link>
					<comments>https://jafrancov.com/2011/06/geocode-gmaps-api-v3/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Mon, 27 Jun 2011 01:29:33 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Direcciones]]></category>
		<category><![CDATA[Geocode]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[Maps]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=2091</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í. Ya hemos visto el cómo obtener geolocalización para ubicar el lugar donde nos encontramos, pero, ¿qué pasa cuando buscamos una dirección diferente a donde nos encontramos?, sería ... <a title="Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) con GMaps API v3" class="read-more" href="https://jafrancov.com/2011/06/geocode-gmaps-api-v3/" aria-label="Leer más sobre Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) 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>Ya hemos visto el <a href="http://jafrancov.com/2010/07/geolocalizacion-con-html5/">cómo obtener geolocalización</a> para ubicar el lugar donde nos encontramos, pero, ¿qué pasa cuando buscamos una dirección diferente a donde nos encontramos?, sería necesario escribir y buscar la dirección deseada, bien pues el proceso es relativamente sencillo. (Para esto requeriremos que agregues los scripts de GMaps y de jQuery, consulta los anteriores post si tienes duda de esto).</p>
<p>Lo que haremos se resume en: escribir una dirección, verificar si existe, si existe, colocar un marcador, centrar y dar zoom en el mapa en la región de la dirección obtenida, si no existe la dirección arrojar un error diciendo que no existe.</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/geocode-simple"><img loading="lazy" decoding="async" class="alignnone" title="Ver Demo Geocoding" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Geocoding" width="140" height="57" /></a></p>
<p>La parte importante del código es generar un objeto que nos permita comunicarnos con la API  de Google Maps y nos convierta la dirección en latitud y longitud de manera que podamos maniobrarlas a placer.</p>
<pre class="brush: jscript; title: ; notranslate">var geocoder = new google.maps.Geocoder();</pre>
<p>Cuando se genera una petición de Geocoding, pueden enviarse varios parámetros para obtener resultados más específicos, un objeto de solicitud completa comprendería:</p>
<ul>
<li><em>address</em> (obligatorio *): es la dirección que deseas codificar de forma geográfica.</li>
<li><em>latLng</em> (obligatorio *): la latitud y la longitud (LatLng ) para las que deseas obtener la dirección interpretable por humanos más cercana.</li>
<li>bounds (opcional): los límites de latitud y de longitud (LatLngBounds) dentro de los que quieres predeterminar los resultados de codificación geográfica con mayor importancia. Para obtener más información, consulta la sección Especificación de la ventana gráfica que encontrarás a continuación.</li>
<li>language (opcional): es el idioma en el que se devuelven los resultados.</li>
<li>region (opcional): el código de región, especificado como una subetiqueta region del lenguaje IANA. En la mayoría de los casos, estas etiquetas se asignan directamente a valores de dos caracteres ccTLD (&#8220;dominio de nivel superior&#8221;) ya conocidos. Para obtener más información, consulta la sección Especificación del código de región que encontrarás a continuación.</li>
</ul>
<p>* <em>Nota</em>: la búsqueda funciona incluyendo solamente el campo address, aunque siempre es requisito incluir un campo address o un campo latLng obligatoriamente, si se coloca un campo latLng, el geocoder realizará el proceso conocido como codificación geográfica inversa, o sea, convertir coordenadas en direcciones, pero, eso lo veremos en otro post.</p>
<p>La solicitud se hace de la siguiente manera:</p>
<pre class="brush: jscript; title: ; notranslate">
// Obtenemos la dirección y la asignamos a una variable
var address = $('#address').val();
// Creamos el Objeto Geocoder
var geocoder = new google.maps.Geocoder();
// Hacemos la petición indicando la dirección e invocamos la función
// geocodeResult enviando todo el resultado obtenido
geocoder.geocode({ 'address': address}, geocodeResult);
</pre>
<p>El objeto que se obtiene de respuesta es un JSON, donde lo manejaríamos como regularmente se hace en javascript, el resultado es algo como esto:</p>
<pre class="brush: jscript; title: ; notranslate">
{
  &quot;status&quot;: &quot;OK&quot;,
  &quot;results&quot;: &#x5B; {
    &quot;types&quot;: &#x5B; &quot;street_address&quot; ],
    &quot;formatted_address&quot;: &quot;1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA&quot;,
    &quot;address_components&quot;: &#x5B; {
      &quot;long_name&quot;: &quot;1600&quot;,
      &quot;short_name&quot;: &quot;1600&quot;,
      &quot;types&quot;: &#x5B; &quot;street_number&quot; ]
    }, {
      &quot;long_name&quot;: &quot;Amphitheatre Pkwy&quot;,
      &quot;short_name&quot;: &quot;Amphitheatre Pkwy&quot;,
      &quot;types&quot;: &#x5B; &quot;route&quot; ]
    }, {
      &quot;long_name&quot;: &quot;Mountain View&quot;,
      &quot;short_name&quot;: &quot;Mountain View&quot;,
      &quot;types&quot;: &#x5B; &quot;locality&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;California&quot;,
      &quot;short_name&quot;: &quot;CA&quot;,
      &quot;types&quot;: &#x5B; &quot;administrative_area_level_1&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;United States&quot;,
      &quot;short_name&quot;: &quot;US&quot;,
      &quot;types&quot;: &#x5B; &quot;country&quot;, &quot;political&quot; ]
    }, {
      &quot;long_name&quot;: &quot;94043&quot;,
      &quot;short_name&quot;: &quot;94043&quot;,
      &quot;types&quot;: &#x5B; &quot;postal_code&quot; ]
    } ],
    &quot;geometry&quot;: {
      &quot;location&quot;: {
        &quot;lat&quot;: 37.4219720,
        &quot;lng&quot;: -122.0841430
      },
      &quot;location_type&quot;: &quot;ROOFTOP&quot;,
      &quot;viewport&quot;: {
        &quot;southwest&quot;: {
          &quot;lat&quot;: 37.4188244,
          &quot;lng&quot;: -122.0872906
        },
        &quot;northeast&quot;: {
          &quot;lat&quot;: 37.4251196,
          &quot;lng&quot;: -122.0809954
        }
      }
    }
  } ]
}
</pre>
<p>Lo único que nos faltaría es el código para validar, interpretar y dibujar. Para esto, hay 3 cosas importantes que debemos tomar en cuenta del JSON que tenemos de respuesta:</p>
<ul>
<li><em>status</em>: contiene la respuesta del estado de la petición, si fue satisfactoria o si hubo algún error y que tipo de error.</li>
<li><em>geometry.location</em>: la ubicación de la dirección solicitada</li>
<li><em>geometry.viewport</em>: los límites recomendados para ajustar el zoom del mapa, haciendo un cuadrante con las esquinas Noreste (superior derecha) y Suroeste (inferior izquierda).</li>
</ul>
<p>Con esto en presente, la función siguiente nos mostrará solamente el primer resultado obtenido, quedando así :</p>
<pre class="brush: jscript; title: ; notranslate">
function geocodeResult(results, status) {
    // Verificamos el estatus
    if (status == 'OK') {
        // Si hay resultados encontrados, centramos y repintamos el mapa
        // esto para eliminar cualquier pin antes puesto
        var mapOptions = {
            center: results&#x5B;0].geometry.location,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), mapOptions);
        // fitBounds acercará el mapa con el zoom adecuado de acuerdo a lo buscado
        map.fitBounds(results&#x5B;0].geometry.viewport);
        // Dibujamos un marcador con la ubicación del primer resultado obtenido
        var markerOptions = { position: results&#x5B;0].geometry.location }
        var marker = new google.maps.Marker(markerOptions);
        marker.setMap(map);
    } else {
        // En caso de no haber resultados o que haya ocurrido un error
        // lanzamos un mensaje con el error
        alert(&quot;Geocoding no tuvo éxito debido a: &quot; + status);
    }
}
</pre>
<p>Y listo con esto tenemos terminado nuestro ejercicio, puedes verificarlo en funcionamiento en la página de demos:</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/geocode-simple"><img loading="lazy" decoding="async" class="alignnone" title="Ver Demo Geocoding" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Geocoding" width="140" height="57" /></a></p>
<p>El código completo quedaría así:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
    load_map();
});

var map;

function load_map() {
    var myLatlng = new google.maps.LatLng(20.68009, -101.35403);
    var myOptions = {
        zoom: 4,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), myOptions);
}

$('#search').live('click', function() {
    // Obtenemos la dirección y la asignamos a una variable
    var address = $('#address').val();
    // Creamos el Objeto Geocoder
    var geocoder = new google.maps.Geocoder();
    // Hacemos la petición indicando la dirección e invocamos la función
    // geocodeResult enviando todo el resultado obtenido
    geocoder.geocode({ 'address': address}, geocodeResult);
});

function geocodeResult(results, status) {
    // Verificamos el estatus
    if (status == 'OK') {
        // Si hay resultados encontrados, centramos y repintamos el mapa
        // esto para eliminar cualquier pin antes puesto
        var mapOptions = {
            center: results&#x5B;0].geometry.location,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), mapOptions);
        // fitBounds acercará el mapa con el zoom adecuado de acuerdo a lo buscado
        map.fitBounds(results&#x5B;0].geometry.viewport);
        // Dibujamos un marcador con la ubicación del primer resultado obtenido
        var markerOptions = { position: results&#x5B;0].geometry.location }
        var marker = new google.maps.Marker(markerOptions);
        marker.setMap(map);
    } else {
        // En caso de no haber resultados o que haya ocurrido un error
        // lanzamos un mensaje con el error
        alert(&quot;Geocoding no tuvo éxito debido a: &quot; + status);
    }
}
</pre>
<p>Y en el Body solamente esto:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;&lt;input type=&quot;text&quot; maxlength=&quot;100&quot; id=&quot;address&quot; placeholder=&quot;Dirección&quot; /&gt; &lt;input type=&quot;button&quot; id=&quot;search&quot; value=&quot;Buscar&quot; /&gt;&lt;/div&gt;&lt;br/&gt;
&lt;div id='map_canvas' style=&quot;width:600px; height:400px;&quot;&gt;&lt;/div&gt;
</pre>
<p>Espero les sirva y cualquier cosa, ya saben cómo contactarme&#8230;</p>
<p style="text-align: right;"><em>Enjoy this Life!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2011/06/geocode-gmaps-api-v3/feed/</wfw:commentRss>
			<slash:comments>76</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2091</post-id>	</item>
		<item>
		<title>Mostrar sólo un InfoWindow y cerrarlo automáticamente GMaps API v3</title>
		<link>https://jafrancov.com/2010/09/single-infowindow/</link>
					<comments>https://jafrancov.com/2010/09/single-infowindow/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Sat, 11 Sep 2010 09:37:36 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[InfoWindow]]></category>
		<category><![CDATA[Marcadores]]></category>
		<category><![CDATA[Marker]]></category>
		<category><![CDATA[Trucos]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=1899</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 algunas ocasiones existe la necesidad de tener varios marcadores dentro de un mapa, cada uno de ellos con un Listener que está a la espera de ... <a title="Mostrar sólo un InfoWindow y cerrarlo automáticamente GMaps API v3" class="read-more" href="https://jafrancov.com/2010/09/single-infowindow/" aria-label="Leer más sobre Mostrar sólo un InfoWindow y cerrarlo automáticamente 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+api/">puedes consultar los demás ejemplos que se han realizado anteriormente aquí</a>.</p>
<p>En algunas ocasiones existe la necesidad de tener varios marcadores dentro de un mapa, cada uno de ellos con un Listener que está a la espera de que en cuanto hagamos &#8216;click&#8217; en ellos, despliegue una InfoWindow que le hayamos asignado, pero, existe una desventaja (o ventaja depende del punto de vista) en la API v3 de GMaps, en comparación a la API v2 de GMaps, ésta es que al tener cada marcador con una ventana de información asignada, al momento de hacer click en un marcador se abre, pero si hacemos click en cualquier otro lugar del mapa (que no sea la &#8216;X&#8217;) no se cierra.</p>
<p>Lo que vamos a realizar es un cierre &#8220;automático&#8221;, esto quiere decir que al tener una InfoWindow abierta y hacer click en cualquier otro lado del mapa, se cierre en automático la ventana abierta en ese momento, de esta manera, siempre quedaría solamente una o ninguna InfoWindow en el mapa, librándonos de tener que estar cerrando manualmente cada una de las ventanas que aparezcan.</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/single-infowindow-visible"><img loading="lazy" decoding="async" class="alignnone" title="Ver Demo Single InfoWindow" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Single InfoWindow" width="140" height="57" /></a></p>
<p>En la v2 de la API de GMaps se hacía así:</p>
<pre class="brush: jscript; title: ; notranslate">
// Listener para generar y gestionar el InfoWindow
// marker es un objeto tipo Marker
	GEvent.addListener(marker, &quot;click&quot;, function() {
		marker.openInfoWindowHtml(&quot;mensaje que quisieras que apareciera&quot;);
	});
</pre>
<p>Con eso era suficiente para que apareciera y desapareciera cuando perdiera el &#8216;<em>foco</em>&#8216;, ahora para la v3 de la API de GMaps se crearon funciones para abrir (<strong>.open()</strong>) y cerrar (<strong>.close()</strong>) la <strong>InfoWindow</strong>, esto significo tener que especificar un evento para la apertura o cierre de la ventana. Esto no es problema, aunque <em>la situación principal radica cuando tienes muchos marcadores, hacer esto para cada uno de ellos</em>.</p>
<p>Solo es un poco de usar y re-usar funciones para facilitarnos la vida. Vamos a crear 2 variables globales una para el mapa y otra para una única instancia del InfoWindow, no es necesario crear más, con ella podremos crear tantas ventanas como nosotros queramos, por el momento no se les asignará el tipo de objeto, así que quedarán como <em>null</em>.</p>
<pre class="brush: jscript; title: ; notranslate">
	var map = null;
	var infoWindow = null;
</pre>
<p>Vamos a crear dos funciones que son las que van a hacer el ejercicio de abrir y cerrar la ventana, para el ejercicio se requerirá que se declaren como sigue. La función para cerrar no recibirá ningún parámetro, simplemente ejecutará el proceso de cerrar del objeto InfoWindow. La función para abrir, recibirá 2 parámetros, el primero tendrá que ser un objeto tipo <em>Marker</em> y el segundo un <em>String</em> (cadena de caracteres); el marcador previamente debe ser creado con los parámetros mínimos para su uso, es decir su posición y en qué mapa se dibujará; el string será para asignarle el contenido específico del marcador en cuestión, igual si así lo deseas, puedes agregar contenido general.</p>
<pre class="brush: jscript; title: ; notranslate">
	function closeInfoWindow() {
		infoWindow.close();
	}

	function openInfoWindow(marker, content) {
		var markerLatLng = marker.getPosition();
		infoWindow.setContent(&#x5B;
			'&lt;div style=&quot;text-align:center;&quot;&gt;',
			'Las coordenadas del &lt;b&gt;',
			content,
			'&lt;/b&gt; son:&lt;br/&gt;',
			markerLatLng.lat(),
			', ',
			markerLatLng.lng(),
			'&lt;br/&gt;&lt;br/&gt;Arr&amp;aacute;strame y haz click para actualizar la posici&amp;oacute;n.',
			'&lt;br/&gt;O puedes hacer click en cualquier otro lado para cerrarme.',
			'&lt;/div&gt;'
		].join(''));
		infoWindow.open(map, marker);
	}
</pre>
<p>Antes de llegar al código completo, vamos a tener en cuenta una pequeña instrucción, un listener que se le va a agregar al mapa, que es el que va a hacer que al momento de hacer click en cualquier parte del mapa que no sea la el infoWindow, lo cierre, independientemente de cuál sea el que esté abierto.</p>
<pre class="brush: jscript; title: ; notranslate">
		google.maps.event.addListener(map, 'click', function(){
			closeInfoWindow();
		});
</pre>
<p>Finalmente la función que se encargará de echar todo a andar, crear los marcadores y asignarles su Listener, indicar el objeto correspondiente a las variables del <em>Map</em> y del <em>InfoWindow</em>, todo este código ya lo hemos visto, así que todo el código quedaría así</p>
<pre class="brush: jscript; title: ; notranslate">
var map = null;
	var infoWindow = null;

	function closeInfoWindow() {
		infoWindow.close();
	}

	function openInfoWindow(marker, content) {
		var markerLatLng = marker.getPosition();
		infoWindow.setContent(&#x5B;
			'&lt;div style=&quot;text-align:center;&quot;&gt;',
			'Las coordenadas del &lt;b&gt;',
			content,
			'&lt;/b&gt; son:&lt;br/&gt;',
			markerLatLng.lat(),
			', ',
			markerLatLng.lng(),
			'&lt;br/&gt;&lt;br/&gt;Arr&amp;aacute;strame y haz click para actualizar la posici&amp;oacute;n.',
			'&lt;br/&gt;O puedes hacer click en cualquier otro lado para cerrarme.',
			'&lt;/div&gt;'
		].join(''));
		infoWindow.open(map, marker);
	}

	function initialize() {
		var myLatlng = new google.maps.LatLng(20.68017,-101.35437);
		var myOptions = {
		  zoom: 13,
		  center: myLatlng,
		  mapTypeId: google.maps.MapTypeId.ROADMAP
		}

		map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), myOptions);

		infoWindow = new google.maps.InfoWindow();

		google.maps.event.addListener(map, 'click', function(){
			closeInfoWindow();
		});

		var marker1 = new google.maps.Marker({
		    position: myLatlng,
		    draggable: true,
		    map: map
		});

		google.maps.event.addListener(marker1, 'click', function(){
			openInfoWindow(marker1, &quot;Marcador 1&quot;);
		});

		var marker2 = new google.maps.Marker({
			map: map,
			position: new google.maps.LatLng(20.66057, -101.37325),
			draggable: true
		});

		google.maps.event.addListener(marker2, 'click', function() {
			openInfoWindow(marker2, &quot;Marcador 2&quot;);
		});

		var marker3 = new google.maps.Marker({
			map: map,
			position: new google.maps.LatLng(20.67133, -101.32999),
			draggable: true
		});

		google.maps.event.addListener(marker3, 'click', function() {
			openInfoWindow(marker3, &quot;Marcador 3&quot;);
		});
	}

	$(document).ready(function() {
	    initialize();
	});

</pre>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/single-infowindow-visible"><img loading="lazy" decoding="async" class="alignnone" title="Ver Demo Single InfoWindow" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo Single InfoWindow" width="140" height="57" /></a></p>
<p>Listo, ahora puedes traspolar este método a algo más dinámico como la consulta de APIs con Geolocalización por ejemplo&#8230; prueba, disfruta y practica&#8230; si tienes dudas, ya sabes dónde preguntarme :-D.</p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2010/09/single-infowindow/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1899</post-id>	</item>
		<item>
		<title>Marcador arrastrable y cómo obtener su Lat/Lng GMaps API v3</title>
		<link>https://jafrancov.com/2010/09/draggable-marker-getting-lat-lng-gmaps-api-v3/</link>
					<comments>https://jafrancov.com/2010/09/draggable-marker-getting-lat-lng-gmaps-api-v3/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Tue, 07 Sep 2010 22:01:22 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Draggable]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[InfoWindow]]></category>
		<category><![CDATA[LatLng]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Marcadores]]></category>
		<category><![CDATA[Marks]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=1881</guid>

					<description><![CDATA[En este pequeño espacio vamos a ver cómo y para qué nos podrían ser útiles los marcadores arrastrables pudiendo obtener la latitud y longitud, para este ejercicio vamos a ocupar el post del uso de las Info Window. Ya hemos visto como dibujar un marcador y asignarle un InfoWindow, así que esta parte será sencilla, ... <a title="Marcador arrastrable y cómo obtener su Lat/Lng GMaps API v3" class="read-more" href="https://jafrancov.com/2010/09/draggable-marker-getting-lat-lng-gmaps-api-v3/" aria-label="Leer más sobre Marcador arrastrable y cómo obtener su Lat/Lng GMaps API v3">Leer más</a>]]></description>
										<content:encoded><![CDATA[<p>En este pequeño espacio vamos a ver cómo y para qué nos podrían ser útiles los marcadores arrastrables pudiendo obtener la latitud y longitud, para este ejercicio vamos a ocupar el post del <a href="http://jafrancov.com/2010/09/info-window-gmaps-api-v3/">uso de las Info Window</a>.</p>
<p>Ya hemos visto como dibujar un marcador y asignarle un InfoWindow, así que esta parte será sencilla, ya que podremos mover el marcador de lugar y a placer, obteniendo las coordenadas de donde fue colocado, los usos que podemos darle varían infinitamente, actualmente podemos ver su uso por ejemplo en <a href="http://jafrancov.com/tag/foursquare">Foursquare</a> cuando editamos un v<em>venue</em>, podemos mover el marcador hasta el lugar más preciso donde se encuentra realmente el venue, más delante podremos hacer polígonos y delimitar las zonas usando las latitudes y longitudes para ser más precisos y bueno&#8230; miles de aplicaciones más que se pueden hacer e imaginar con ello, interesante, ¿no?</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/draggable-marker-get-lat-lng"><img loading="lazy" decoding="async" class="aligncenter" title="Ver ejemplo de Marcador arrastrable" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="" width="140" height="57" /></a></p>
<p>En la zona de <a href="http://code.google.com/intl/es-ES/apis/maps/documentation/javascript/reference.html" target="_blank">Referencias de la API de GMaps v3</a> podremos encontrar a detalle las propiedades y funciones de cada elemento que usemos, para este ejemplo usaremos una <em>propiedad</em> de los marcadores que se llama <strong>draggable</strong>, esta propiedad hace que los marcadores que dibujemos puedan ser &#8220;<strong>arrastrables</strong>&#8220;, es decir, que los podamos tomar y arrastrarlos o moverlos a cualquier parte del mapa. Lo único que tenemos que hacer para hacer esa función es escribir en las propiedades del marcador <strong>draggable: true</strong> como lo veremos a continuación:</p>
<pre class="brush: jscript; title: ; notranslate">
		var marker = new google.maps.Marker({
		    position: myLatlng,
		    draggable: true,
		    map: map,
		    title:&amp;quot;Ejemplo marcador arrastrable&amp;quot;
		});
</pre>
<p>Ahora nos centraremos en la función que se llama <em><strong>openInfoWindow</strong></em>.</p>
<pre class="brush: jscript; title: ; notranslate">
	function openInfoWindow(marker) {
		var markerLatLng = marker.getPosition();
		infoWindow.setContent(&#x5B;
			'&amp;lt;b&amp;gt;La posicion del marcador es:&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;',
			markerLatLng.lat(),
			', ',
			markerLatLng.lng(),
			'&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Arr&amp;amp;aacute;strame y haz click para actualizar la posici&amp;amp;oacute;n.'
		].join(''));
		infoWindow.open(map, marker);
	}
</pre>
<p>En la función <em>openInfoWindow</em> podemos observar que recibe un parámetro al que manejaremos con el nombre de <em>marker</em> dentro de la función (al momento de invocar la función puede llamarse de cualquier otra manera, pero es necesario que sea un objeto tipo <strong>Marker</strong>); dentro de la función declaramos una variable llamada <em>markerLatLng</em> que va a almacenar la propiedad <em>LatLng</em> del marcador mediante la función <em><strong>getPosition()</strong></em>, lo que obtiene es un objeto con la latitud y longitud del marcador que recibió la función, para hacer referencia a cada uno de ellos, es con las subfunciones <strong>.lat()</strong> y <strong>.lng()</strong>; en el <em>setContent</em> del InfoWindow asignamos todo el contenido como un arreglo de cadenas, por eso la separación en comas y <em>no con el signo más (+)</em>, con la instrucción join se indica que se concatene o se &#8220;unan&#8221; las cadenas; por último con la función <strong>open()</strong> de infoWindow mostramos de diálogo con el contenido que le asignamos anteriormente.</p>
<p>Ahora si veamos el código completo, la mayoría del código ya lo hemos visto así que aquí está:</p>
<pre class="brush: jscript; title: ; notranslate">
	var map = null;
	var infoWindow = null;

	function openInfoWindow(marker) {
		var markerLatLng = marker.getPosition();
		infoWindow.setContent(&#x5B;
			'&amp;lt;b&amp;gt;La posicion del marcador es:&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;',
			markerLatLng.lat(),
			', ',
			markerLatLng.lng(),
			'&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Arr&amp;amp;aacute;strame y haz click para actualizar la posici&amp;amp;oacute;n.'
		].join(''));
		infoWindow.open(map, marker);
	}

	function initialize() {
		var myLatlng = new google.maps.LatLng(20.68017,-101.35437);
		var myOptions = {
		  zoom: 13,
		  center: myLatlng,
		  mapTypeId: google.maps.MapTypeId.ROADMAP
		}

		map = new google.maps.Map($(&amp;quot;#map_canvas&amp;quot;).get(0), myOptions);

		infoWindow = new google.maps.InfoWindow();

		var marker = new google.maps.Marker({
		    position: myLatlng,
		    draggable: true,
		    map: map,
		    title:&amp;quot;Ejemplo marcador arrastrable&amp;quot;
		});

		google.maps.event.addListener(marker, 'click', function(){
			openInfoWindow(marker);
		});
	}

	$(document).ready(function() {
	    initialize();
	});
</pre>
<p>Para este ejemplo y posteriores comenzaremos a usar funciones para un mejor manejo del código, como pueden ver hemos declarado la variable <em>map</em> e <em>infoWindow</em> como globales, las cuáles podrán usarse a través de las funciones sin temor a que se pierdan las referencias al liberar la función. La razón por la cual es mejor poner este código en una función, es que si requerimos colocar más de un marcador, podamos enlazar un InfoWindow diferente para cada uno, sin necesidad de escribir el mismo código individualmente, además de que la función puede re-usarse tantas veces como sea necesario. Para ver cómo es que funciona este ejercicio ve al siguiente enlace:</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/draggable-marker-get-lat-lng"><img loading="lazy" decoding="async" class="aligncenter" title="Ver ejemplo de Marcador arrastrable" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="" width="140" height="57" /></a></p>
<p>Es todo por esta ocasión si tienen dudas ya saben cómo y dónde preguntar, mucha suerte&#8230;</p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2010/09/draggable-marker-getting-lat-lng-gmaps-api-v3/feed/</wfw:commentRss>
			<slash:comments>39</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1881</post-id>	</item>
		<item>
		<title>Info Window en GMaps API v3</title>
		<link>https://jafrancov.com/2010/09/info-window-gmaps-api-v3/</link>
					<comments>https://jafrancov.com/2010/09/info-window-gmaps-api-v3/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Thu, 02 Sep 2010 11:13:29 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[InfoWindow]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Maps]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=1854</guid>

					<description><![CDATA[A partir de este post, me enfocaré en el tema, si nunca has hecho nada con GMaps, te sugiero leas las bases del manejo de la API de GMaps v3. ¿Qué es un Info Window? Quizá han visto que en muchos de los mapas de mostrados con la tecnología de Google, al dar clicks sobre ... <a title="Info Window en GMaps API v3" class="read-more" href="https://jafrancov.com/2010/09/info-window-gmaps-api-v3/" aria-label="Leer más sobre Info Window en GMaps API v3">Leer más</a>]]></description>
										<content:encoded><![CDATA[<p>A partir de este post, me enfocaré en el tema, si nunca has hecho nada con <a href="http://jafrancov.com/tag/gmaps">GMaps</a>, te sugiero leas las <a href="http://jafrancov.com/2010/08/bases-gmaps-api-v3/" target="_blank">bases del manejo de la API de GMaps v3</a>.</p>
<p>¿Qué es un <strong>Info Window</strong>?</p>
<p>Quizá han visto que en muchos de los mapas de mostrados con la tecnología de Google, al dar clicks sobre los marcadores, mapa, formas, etc., nos aparece un cuadro con información, bien, pues eso es un Info Window.</p>
<p>Las opciones que usaremos para la creación del objeto de InfoWindow contendrá los siguientes campos:</p>
<ul>
<li><strong><em>content</em></strong> contiene una cadena de texto o nodo DOM que mostrará al abrir la ventana de información.</li>
<li><strong><em>position</em></strong> contiene el <em>LatLng</em> al cuál estará asignado, ten en cuenta que si es asignada a un marcador, automáticamente adquiere el valor de su posición, en caso de no asignarle algún LatLng toma el centro que se muestra por primera vez del mapa, para los polígonos trabaja de manera diferente y lo hablaremos en otro post.</li>
<li><strong><em>maxWidth</em></strong> especifica el ancho máximo en pixeles, que podrá adquirir la ventana, por default adquiere el ancho del contenido, sin saturar el espacio del mapa, haciendo saltos de línea en automático, cuando el contenido ha alcanzado el máximo permitido, se expandirá verticalmente igual, sin saturar el espacio del mapa. En caso de que se establezca un determinado ancho, el texto en automático dará saltos de línea al llegar al límite establecido, si el contenido es mucho se extenderá verticalmente sin saturar el espacio.</li>
</ul>
<p>El contenido del InfoWindow puede contener una cadena de texto, un fragmento de código HTML, o un mismo elemento DOM. Para establecer este contenido, debe hacerse una llamada explícita al constructor del InfoWindow con <strong><em>setContent()</em></strong>. Ten cuidado al usar div&#8217;s ya que si le pones estilos y sobrepasa el espacio puede &#8220;derramarse&#8221; el contenido fuera del InfoWindow.</p>
<p>Ahora si vamos directo al código, este ya solamente es el JavaScript, recuerda agregar <a href="http://jafrancov.com/tag/jquery">jQuery</a> también:</p>
<pre class="brush: jscript; title: ; notranslate">
var myLatlng = new google.maps.LatLng(20.68017,-101.35437);
var myOptions = {
  zoom: 13,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}

var map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), myOptions);

var contentString = '&lt;div id=&quot;div_ejemplo&quot;&gt;'+
    '&lt;p&gt;Este es un ejemplo de &lt;b&gt;InfoWindow&lt;/b&gt;, ' +
    'como puedes ver puedes agregar cualquier cosa, ' +
    'cualquier &lt;em&gt;HTML&lt;/em&gt;.&lt;/p&gt;' +
    '&lt;p&gt;Este InfoWindow tiene un ancho de 200px ' +
    'y autom&amp;aacute;ticamente da los saltos de l&amp;iacute;nea.&lt;/p&gt;'+
    '&lt;p&gt;Para ver el tutorial &lt;a href=&quot;http://jafrancov.com/2010/09/info-window-gmaps-api-v3/&quot;&gt;'+
    'clickea aqu&amp;iacute;&lt;/a&gt;.&lt;/p&gt;'+
    '&lt;/div&gt;';

var infowindow = new google.maps.InfoWindow({
    content: contentString,
    maxWidth: 200
});

var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    title:&quot;Ejemplo InfoWindow&quot;
});

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});
</pre>
<p>Solamente un último detalle antes de terminar, podrán observar que al final vemos un <em>addListener</em>, para que se pueda mostrar el InfoWindow al hacer click, es necesario agregar un <em>Listener</em>, que valga la redundancia, está a la escucha de un click, analicémoslo:</p>
<pre class="brush: jscript; title: ; notranslate">
google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});</pre>
<p>Vamos por partes <em><strong>google.maps.event.addListener</strong></em>, es una función integrada de la API que agregará el listener, requiere de 3 cosas, a quién se le va a asignar el listener, en este caso a <strong>marker</strong> que es la variable que almacena el objeto del marcador que se dibuja, el tipo de listener que para este caso es un <strong>&#8216;click&#8217;</strong> y por último el proceso que realizará, que para el ejemplo es una función. Dentro de la función especificamos lo que hará el listener, haremos uso de <strong>infowindow</strong> que es la variable que contiene el objeto con los detalles del <em>InfoWindow</em> por supuesto, a la cual se le llama la función <strong>open()</strong> que es la que se encargará de mostrar el InfoWindow, y esta funcióna a su vez, requiere de 2 parámetros, el primero en qué objeto de mapa se va a agregar (<strong>map</strong>) y segundo, a qué objeto se le va a asignar (<strong>marker</strong>), en caso de que no se especifique la segunda variable, se mostrará en el centro inicial del mapa.</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/info-window"><img loading="lazy" decoding="async" class="aligncenter" title="Ver Demo de InfoWindow GMaps API v3" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo de InfoWindow GMaps API v3" width="140" height="57" /></a></p>
<p>Ahora si es todo por este tutorial, espero les sirva, si tienen dudas ya saben dónde y cómo preguntar <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2010/09/info-window-gmaps-api-v3/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1854</post-id>	</item>
		<item>
		<title>Primeros pasos con la API v3 de Google Maps (Mapa y Marcador)</title>
		<link>https://jafrancov.com/2010/08/bases-gmaps-api-v3/</link>
					<comments>https://jafrancov.com/2010/08/bases-gmaps-api-v3/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Thu, 26 Aug 2010 22:12:44 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=1832</guid>

					<description><![CDATA[Ya tengo un rato manejando la API JavaScript de Google Maps pero ahora con su cambio a la v3 hay cosas que cambiaron y hay que adaptarse, entonces se me ocurrió compartirles lo que vaya aprendiendo desde cero, de cualquier manera pueden leer si así lo desean, toda la documentación oficial de la API de ... <a title="Primeros pasos con la API v3 de Google Maps (Mapa y Marcador)" class="read-more" href="https://jafrancov.com/2010/08/bases-gmaps-api-v3/" aria-label="Leer más sobre Primeros pasos con la API v3 de Google Maps (Mapa y Marcador)">Leer más</a>]]></description>
										<content:encoded><![CDATA[<p>Ya tengo un rato manejando la API JavaScript de <a href="http://jafrancov.com/gmaps">Google Maps</a> pero ahora con su cambio a la v3 hay cosas que cambiaron y hay que adaptarse, entonces se me ocurrió compartirles lo que vaya aprendiendo desde cero, de cualquier manera pueden leer si así lo desean, toda la <a href="http://code.google.com/intl/es-ES/apis/maps/documentation/javascript/" target="_blank">documentación oficial de la API de Google Maps</a>.</p>
<p>Lo que voy a intentar hacer es ir al grano del tema del post, para no dar tantas vueltas y quitar toda la paja que viene en la documentación&#8230; &#8220;<em>Directo y a la cabeza</em>&#8221; dicen por ahí.</p>
<p>Para iniciar será necesario y preferente que tengan un poco de conocimiento principalmente de JavaScript y <a href="http://jafrancov.com/tag/jquery">jQuery</a>, asímismo de HTML y un poco de CSS, igual unas pequeñas nociones de <a href="http://jafrancov.com/tag/html5">HTML5</a> nos servirán en publicaciones posteriores.</p>
<p>Para empezar hay que declarar nuestra aplicación como HTML5, sencillamente escribiendo el DOCTYPE así:</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;</pre>
<p>También para estos ejemplos es necesario incluir los scripts de jQuery, para este dirígete a su <a href="http://jquery.com/" target="_blank">sitio oficial</a>, descárgalo y agrega el script, y claro el más importante de estos ejemplos, el script de Google Maps, que para la v3 no es necesario generar una key como en la versión 2 se hacía, ahora solamente agregas el siguiente script:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps/api/js?sensor=set_to_true_or_false&quot;&gt;&lt;/script&gt;
</pre>
<p>Si puedes observar, al final del script dice <em>sensor=set_to_true_or_false</em> es para indicar si queremos que el sensor identifique la posición del usuario, debes indicar <em>true</em> o <em>false</em> según lo requiera tu aplicación.</p>
<p><strong>NOTA</strong>: hay una pequeña discusión sobre la localización de los scripts, puedes ponerlos ya sea dentro del <em>head</em> o del <em>body</em>, pero muchos recomiendan que vayan antes de cerrar la etiqueta body, ya que evita que el contenido principal tarde en mostrarse, entonces&#8230; es tu decisión donde colocarlos, al final de cuentas para fines didácticos, funcionan igual en cualquier lado.</p>
<p>Dentro del body vamos a declarar un DIV que incluya su id y estilos para un ancho y alto donde queramos que se dibuje el mapa, debe ser algo como esto:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div id=&quot;map_canvas&quot; style=&quot;width: 640px; height: 400px;&quot;&gt;&lt;/div&gt;</pre>
<p>Ahora vamos con las opciones del mapa, primero declaremos la latitud y longitud donde queremos que aparezca nuestro mapa de esta manera:</p>
<pre class="brush: jscript; title: ; notranslate">var myLatlng = new google.maps.LatLng(myLatitude, myLongitude)</pre>
<p>Lo que hace esa línea de código, es que creamos una instancia de un objeto de la API de GMaps que guardará la latitud y longitud del mapa, marcador o sea lo que sea que queramos dibujar, así que recuérdenla bien para futuros usos.</p>
<p>Los valores pueden variar de la siguiente manera:</p>
<ul>
<li><em>myLatitude</em> es el valor del ángulo que parte del ecuador, puede variar de 90 a -90 de norte a sur respectivamente, siendo 0 el ecuador.</li>
<li><em>myLongitude</em> es el valor que parte del meridiano de Greenwich, o sea a partir de Londres, Inglaterra, tomando valores que varian de -180 a 180 de este a oeste respectivamente siendo 0 en Londres.</li>
</ul>
<p><strong>TIP</strong>: Si quieres obtener la latitud y longitud específicos dirígete a <a href="http://Maps.Google.com" target="_blank">Maps.Google.com</a> y en los Labs, activa el marcador de latitud y longitud.</p>
<p>Ahora, vamos con las opciones del mapa, las vamos a declarar de la siguiente forma:</p>
<pre class="brush: jscript; title: ; notranslate">
var myOptions = {
  zoom: 8,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
</pre>
<p>Fácil de entender, ¿no?, lo que se realiza con esto es que a myOptions se le adjuntan las opciones propias de despliegue del mapa, <strong>zoom</strong>, es el nivel de visión del mapa, el más bajo 1, el más alto puede variar, ya que en algunos lugares puede ser hasta de un nivel 25 (hasta donde he descubierto), ya dependerá de lo que quieras mostrar en tu aplicación; <strong>center</strong>, si claro, centra el mapa con la latitud y longitud que un paso antes hemos declarado con la variable <em>myLatlng</em>; <strong>mapTypeId</strong> es una variable que interpreta el tipo de mapa que se va a desplegar, los cuales pueden ser estos:</p>
<ul>
<li><em>ROADMAP</em> muestra el mapa normal, el que es en 2D, si no se declara nada, este es el tipo por default.</li>
<li><em>SATELLITE</em> muestra las cuadros fotografiados de la superficie.</li>
<li><em>HYBRID</em> muestra una combinación de cuadro fotográficos, y el mapa 2D con nombres de calles y demás sobrepuesto, es como sobrevolar la superficie con todo y direcciones.</li>
<li><em>TERRAIN</em> muestra cuadros del relieve físico de la tierra, elevaciones, ríos, montañas, entre otros.</li>
</ul>
<p>Lo que prosigue es crear una instancia que guarde, interprete y dibuje todas las opciones que hemos visto de un mapa, recuerden tener jQuery cargado para que les funcione este script:</p>
<pre class="brush: jscript; title: ; notranslate">var map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), myOptions);</pre>
<p>Así creamos la instancia al mapa y le decimos que lo coloque en el DIV con el ID de <strong><em>map_canvas</em></strong>, así como las opciones que requiere el mapa para ser desplegado correctamente. La variable <strong>map</strong> nos servirá más delante para tener control sobre el mismo mapa, como dibujar marcadores, formas, líneas, etc., haciéndole referencia.</p>
<p>Por último vamos a colocar/dibujar un marcador, un pin, o como lo quieran llamar, es muy simple hacerlo:</p>
<pre class="brush: jscript; title: ; notranslate">
var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title:&quot;Hola Mundo&quot;
  });
</pre>
<p>Estas son las opciones básicas y quizá mínimas para dibujar un marcador, para <strong>position</strong> usaremos la misma variable que usamos para centrar el mapa y colocar el marcador en el centro del mismo, <strong>map</strong> es la instancia del objeto del mapa sobre el que vamos a colocar el marcador, <strong>title</strong> es el tooltip del marcador (el que dice un texto cuando dejamos encima el puntero).</p>
<p>Entonces al final, el código lo colocamos en una función que llamaremos <em>initialize</em>, para poder llamarlo posteriormente en cualquier parte de nuestro sitio, que para el ejercicio lo haremos en cuanto se cargue el body, agregando en la etiqueta de apertura:</p>
<pre class="brush: xml; title: ; notranslate">&lt;body onload=&quot;initialize()&quot;&gt;</pre>
<p>Aunque puedes llamar la función desde cualquier otro lado, ahora si nuestro documento con todo y el script debe verse algo semejante a esto:</p>
<pre class="brush: jscript; html-script: true; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps/api/js?sensor=set_to_true_or_false&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  function initialize() {
    var myLatlng = new google.maps.LatLng(20.68009, -101.35403);
    var myOptions = {
      zoom: 8,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map($(&quot;#map_canvas&quot;).get(0), myOptions);
    var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title:&quot;Hola Mundo&quot;
  });
  }

&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;initialize()&quot;&gt;
  &lt;div id=&quot;map_canvas&quot; style=&quot;width: 640px; height: 400px;&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><a href="http://gmaps.alexfranco.mx/basics-gmaps-map-marker"><img loading="lazy" decoding="async" class="aligncenter" title="Ver Demo" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo" width="140" height="57" /></a></p>
<p>Es todo por esta ocasión, ya tengo otros ejercicios listos, solamente falta desglozarlos, cualquier duda, ya saben cómo contactarme :D.</p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2010/08/bases-gmaps-api-v3/feed/</wfw:commentRss>
			<slash:comments>61</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1832</post-id>	</item>
		<item>
		<title>Geolocalización con HTML5</title>
		<link>https://jafrancov.com/2010/07/geolocalizacion-con-html5/</link>
					<comments>https://jafrancov.com/2010/07/geolocalizacion-con-html5/#comments</comments>
		
		<dc:creator><![CDATA[Alex Franco]]></dc:creator>
		<pubDate>Thu, 08 Jul 2010 16:25:26 +0000</pubDate>
				<category><![CDATA[Codigo]]></category>
		<category><![CDATA[Geolocalización]]></category>
		<category><![CDATA[Geolocation]]></category>
		<category><![CDATA[GMaps]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Programación]]></category>
		<guid isPermaLink="false">http://jafrancov.com/?p=1762</guid>

					<description><![CDATA[HTML 5 (HyperText Markup Language, versión 5) es la quinta revisión importante del lenguaje básico de la World Wide Web. Pero el tema central de este post no es HTML5, sin embargo es la base de esto. La Geolocalización es una de las características principales de HTML5, la cual empieza a tener un gran empuje ... <a title="Geolocalización con HTML5" class="read-more" href="https://jafrancov.com/2010/07/geolocalizacion-con-html5/" aria-label="Leer más sobre Geolocalización con HTML5">Leer más</a>]]></description>
										<content:encoded><![CDATA[<p><a href="http://jafrancov/tag/html5"><strong>HTML 5</strong></a> (<em>HyperText Markup Language, versión 5</em>) es la quinta revisión importante del lenguaje básico de la World Wide Web. Pero el tema central de este post no es HTML5, sin embargo es la base de esto.</p>
<p>La <a href="http://jafrancov.com/tag/geolocalizacion"><strong>Geolocalización</strong></a> es una de las características principales de HTML5, la cual empieza a tener un gran empuje  en todos los ámbitos de la web, redes sociales y más.</p>
<p>Ya entramos un poco en la parte de la <a href="http://jafrancov.com/2010/07/geolocalizacion-mediante-la-api-de-firefox/">geolocalización con la API de Firefox</a>, ahora veremos con solamente un poco de código cómo podremos obtener la ubicación de un usuario con HTML5, que en realidad estaremos usando la API de Geolocalización de la W3C (Consorcio World Wide Web), que es el organismo internacional que dicta lo estándares Web. Podremos observar que obtener la información de esta manera es aún más rápida.</p>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/geolocation-html5" target="_blank"><img loading="lazy" decoding="async" class="aligncenter" title="Ver Demo" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo" width="140" height="57" /></a></p>
<pre class="brush: jscript; title: ; notranslate">
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    var options = { position: new google.maps.LatLng(lat, lng) }
    var marker = new google.maps.Marker(options);
    marker.setMap(map);
  });
}
</pre>
<p>Con el objeto <strong>navigator.geolocation</strong> es con el que detectamos si el navegador tiene las capacidades necesarias para detectar la Geolocalización.</p>
<p>El método <strong>navigator.geolocation.getCurrentPosition</strong> es el que hace la labor de recuperación de la ubicación del usuario mediante el objeto <strong>position</strong> que se envía a la función. Una vez que se ha llamado a este método, por medio de una función que permita su ejecución, el navegador nos preguntará si le permitimos usar la información de nuestra ubicación, lo hará de esta manera:</p>
<p style="text-align: center;"><a title="http://jafrancov.com/2010/07/geolocalizacion-mediante-la-api-... on Twitpic" href="http://twitpic.com/239sna"><img decoding="async" src="http://twitpic.com/show/full/239sna.png" alt="http://jafrancov.com/2010/07/geolocalizacion-mediante-la-api-... on Twitpic" width="560" /></a></p>
<p>Las instrucciones <strong>position.coords.latitude</strong> y <strong>position.coords.longitude</strong> extraen la información de latitud y longitud correspondiente de la posición obtenida.</p>
<p>Las últimas 3 líneas del código son las que dibujan el mapa y nos colocan el <em>pin</em> en as coordenadas obtenidas, si quieres dibujar el mapa con estas instrucciones no olvides agregar el siguiente script dentro de las etiquetas <em>head</em>:</p>
<pre class="brush: jscript; title: ; notranslate">&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.google.com/maps/api/js?sensor=true&quot; &gt;&lt;/script&gt;</pre>
<p style="text-align: center;"><a href="http://gmaps.alexfranco.mx/geolocation-html5" target="_blank"><img loading="lazy" decoding="async" class="aligncenter" title="Ver Demo" src="http://sites.google.com/site/jafrancov/stuff/ver-demo.png" alt="Ver Demo" width="140" height="57" /></a></p>
<p>Ahora si a disfrutar de la <a href="http://jafrancov/tag/geolocalizacion">Geolocalización</a> con <a href="http://jafrancov/tag/html5">HTML5</a>.</p>
<p style="text-align: right;"><em>Enjoy this Life!!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jafrancov.com/2010/07/geolocalizacion-con-html5/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1762</post-id>	</item>
	</channel>
</rss>
