<?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>Jorge Iván Meza Martínez &#187; GoogleMaps</title> <atom:link href="http://blog.jorgeivanmeza.com/tag/googlemaps/feed/" rel="self" type="application/rss+xml" /><link>http://blog.jorgeivanmeza.com</link> <description>The Fire Within Me: &#34;knowledge will set you free&#34;</description> <lastBuildDate>Tue, 31 Jan 2012 18:18:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Como crear un mapa con GoogleMaps version 2, en pasos simples</title><link>http://blog.jorgeivanmeza.com/2009/09/como-crear-un-mapa-con-googlemaps-version-2-en-pasos-simples/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-crear-un-mapa-con-googlemaps-version-2-en-pasos-simples</link> <comments>http://blog.jorgeivanmeza.com/2009/09/como-crear-un-mapa-con-googlemaps-version-2-en-pasos-simples/#comments</comments> <pubDate>Mon, 28 Sep 2009 20:02:34 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[GoogleMaps]]></category> <category><![CDATA[Hiper]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PHP]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=2022</guid> <description><![CDATA[Introducción. Utilizar el API de Google Maps para crear mapas interactivos con Javascript en nuestros sitios web es muy fácil de implementar.  Este servicio ofrece dos alternativas: los Mapplets que se ejecutan de manera asíncrona, directamente en el sitio de &#8230; <a
href="http://blog.jorgeivanmeza.com/2009/09/como-crear-un-mapa-con-googlemaps-version-2-en-pasos-simples/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>Utilizar el API de <a
href="http://maps.google.com/" target="_blank">Google Maps</a> para crear mapas interactivos con Javascript en nuestros sitios web es muy fácil de implementar.  Este servicio ofrece dos alternativas: los Mapplets que se ejecutan de manera asíncrona, directamente en el sitio de <a
href="http://maps.google.com/" target="_blank">maps.google.com</a> y los desarrolladores sólo debemos especificar y albergar un documento XML donde se encuentra la especificación y los datos del mapa.  Por el otro lado están los mapas implementados directamente con el API de manera síncrona, se incrustan en nuestras propias páginas web y su comportamiento se define a través del Javascript que implementemos.</p><p>En otras ocasiones me he referido a los <a
href="http://blog.jorgeivanmeza.com/tag/GoogleMapplets/" target="_blank">Mapplets</a> por esto la implementación de hoy la vamos a realizar utilizando el API síncrono.</p><h2>Objetivo.</h2><p>El objetivo del presente artículo es el de visitar a Cuba donde ubicaremos marcadores sobre 5 ciudades de este país y asociaremos globitos con mensajes personalizados que aparecerán cuando el usuario haga clic sobre las diferentes ciudades.</p><div
id="attachment_2024" class="wp-caption aligncenter" style="width: 650px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2009/09/Objetivo_Cuba5.png"><img
class="size-full wp-image-2024" title="Objetivo_Cuba5" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2009/09/Objetivo_Cuba5.png" alt="Resultado final" width="640" height="478" /></a><p
class="wp-caption-text">Resultado final</p></div><h2>Procedimiento.</h2><h3>Condiciones inciales.</h3><p>Para el desarrollo de esta mini aplicación vamos a utilizar PHP y <a
href="http://en.wikipedia.org/wiki/Vanilla_software" target="_blank">vanilla</a> Javascript, es decir, no nos apoyaremos en ningún <em>framework</em> de Javascript adicional a lo comúnmente soportado por los navegadores web actuales.</p><p>En mi caso, mi servidor web de destino será <a
href="http://demo.jorgeivanmeza.com/" target="_blank">http://demo.jorgeivanmeza.com/</a>.  Es muy importante determinar esto para la próxima etapa, la creación de la llave del API.</p><h3>Creación de la llave del API.</h3><p>Acceda al siguiente enlace y cree su propia llave para el API de Google.  Es necesario especificar el dominio bajo el cual se ejecutará la aplicación web.  En el caso de desarrollar la aplicación de manera local, puede obtener una llave para <a
href="http://localhost/" target="_blank">http://localhost/</a> y después la deberá modificar antes de desplegarla en el servidor de producción.  Si no especifica el dominio correcto, la aplicación no podrá generar el mapa.</p><p
style="padding-left: 30px;"><a
href="http://code.google.com/apis/maps/signup.html" target="_blank">http://code.google.com/apis/maps/signup.html</a></p><p>Es necesario contar con una cuenta de Google, así que de no contar con una es necesario <a
href="http://mail.google.com/mail/signup" target="_blank">abrirla</a> antes de intentar crear una llave del API.</p><h3>Creación de una estructura básica para la página web.</h3><p>Cree el archivo <span
style="font-family: courier new,courier;">simpleGoogleMaps.php</span> (o como desee llamarlo) en una ubicación pública de su servidor web (bajo el <span
style="font-family: courier new,courier;">DOCUMENT_ROOT</span>).  Agregue siguiente contenido al archivo y guárdelo.</p><pre class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns='http://www.w3.org/1999/xhtml'&gt;
&lt;head&gt;
    &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /&gt;
    &lt;meta name="Author" content="Jorge Iván Meza Martínez - http://jorgeivanmeza.com/ - jimezam@gmail.com" /&gt;
    &lt;meta name="Description" content="Demostración Simple de Google Maps" /&gt;
    &lt;title&gt;Demostración Simple de Google Maps&lt;/title&gt;
    &lt;!-- Llave del API --&gt;
    &lt;!-- Estilos CSS --&gt;
    &lt;!-- Implementación Javascript --&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- Ubicación del mapa --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><h3>Especificar la Llave del API.</h3><p>En el contenido del archivo PHP actualice el siguiente código por la marca de <span
style="font-family: courier new,courier;">Llave del API</span>.</p><pre class="php">&lt;script src='http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;hl=es&amp;key=XXXXX' type='text/javascript'&gt;&lt;/script&gt;</pre><p>Reemplace la cadena <span
style="font-family: courier new,courier;">XXXXX</span> por su Llave del API específica que obtuvo durante el paso anterior correspondiente.</p><h3>Especificar la ubicación del mapa.</h3><p>El mapa se generará en un <span
style="font-family: courier new,courier;">div</span> que determinemos dentro del <span
style="font-family: courier new,courier;">body</span> para tal fin, este puede estar integrado normalmente con el resto del diseño de la página.  En nuestro caso particular debido a su simplicidad, el contenido de la página será solamente dicho <span
style="font-family: courier new,courier;">div</span>.</p><p>Reemplace la etiqueta <span
style="font-family: courier new,courier;">Ubicación del mapa</span> con el siguiente código.</p><pre class="php">&lt;div id='MiMapa'&gt;Aqui viene el mapa!&lt;/div&gt;</pre><p>Es necesario identificar al <span
style="font-family: courier new,courier;">div</span> con un <span
style="font-family: courier new,courier;">id</span> único que utilizaremos posteriormente.</p><h3>Actualizar el estilo del mapa.</h3><p>El siguiente paso es el especificar un estilo para el <span
style="font-family: courier new,courier;">div</span> que contendrá al mapa.  Este estilo finalmente dependerá del diseño de la página.  Para este caso utilizamos CSS para definirle un alto y un ancho al mapa.</p><p>Reemplace la etiqueta <span
style="font-family: courier new,courier;">Estilos CSS</span> con el siguiente código.</p><pre class="css">&lt;style content="text/css"&gt;
#MiMapa
{
    width: 640px;
    height: 480px;
}
&lt;/style&gt;</pre><h3>Especificar la implementación Javascript.</h3><p>El código faltante hace referencia a código Javascript que va a determinar el contenido y comportamiento del mapa.  Reemplace la etiqueta <span
style="font-family: courier new,courier;">Implementación Javascript</span> con el siguiente código base.</p><pre class="javascript">&lt;script type='text/javascript'&gt;
// El código de las siguiente secciones se incluye aquí ...
&lt;/script&gt;</pre><h3>Preparar el mapa.</h3><p>Para crear el mapa y establecer sus parámetros iniciales se realizan las siguientes acciones.</p><ol><li>Verificar que exista la compatibilidad adecuada con el navegador.</li><li>Crear la instancia del mapa asociada al <span
style="font-family: courier new,courier;">div</span> especifico.</li><li>Establecer la ubicación inicial del mapa.</li><li>Establecer el tipo inicial del mapa.</li></ol><p>Para hacer esto creamos al objeto <span
style="font-family: courier new,courier;">mapa1</span> y a la función <span
style="font-family: comic sans ms,sans-serif;">prepararMapa</span> con el siguiente código.</p><pre class="javascript">/*
 * Objeto que hace referencia al mapa desplegado.
 */
var mapa1 = null;
/*
 * Establece los parámetros iniciales del mapa instanciando
 * al objeto 'mapa'.
 *
 * @param String  - Nombre del DIV que albergará al mapa.
 * @param Double  - Latitud donde se centrará el mapa.
 * @param Double  - Longitud donde se centrará el mapa.
 * @param Integer - Altura donde se centrará el mapa.
 *
 * @return el mapa en éxito, null en fracaso.
 */
function prepararMapa(div, centerLat, centerLang, centerAlt)
{
    /* Verifica que el navegador sea compatible con
       Google Maps */
    if (GBrowserIsCompatible())   // [1]
    {
        /* Crea la instancia del objeto 'mapa' asociándole
           el div correspondiente */
        mapa = new GMap2(document.getElementById(div));    // [2]
        /* Centra el mapa en la ubicacion (latitud, longitud
           y altura) especificadas */
        mapa.setCenter(new GLatLng(centerLat, centerLang), centerAlt);     // [3]
        /* Establece el tipo de mapa.  Disponibles:
               - G_NORMAL_MAP
               - G_SATELLITE_MAP
               - G_HYBRID_MAP
           Enlace: http://code.google.com/apis/maps/documentation/controls.html */
        mapa.setMapType(G_HYBRID_MAP);      // [4]
        /* Establece el comportamiento por defecto de los
           elementos del UI del mapa.
           Enlace: http://code.google.com/apis/maps/documentation/reference.html#GMap2.setUIToDefault */
        mapa.setUIToDefault();
        /* Éxito */
        return mapa;
    }
    else     /* Fracaso */
        return null;
}</pre><h3>Agregar un marcador.</h3><p>Posteriormente implementamos la función <span
style="font-family: courier new,courier;">agregarMarcador</span> que se ocupará de agregar un marcador creado con cierta información específica al mapa.  Su código es el siguiente.</p><pre class="javascript">/*
 * Agrega un marcado con la información especificada
 * al mapa.
 *
 * @param GMap2   - Referencia externa al mapa.
 * @param Double  - Latitud donde se centrará el mapa.
 * @param Double  - Longitud donde se centrará el mapa.
 * @param String  - Mensaje que tendrá la burbuja asociada.
 *
 * @return void.
 */
 function agregarMarcador(mapa, latitud, longitud, mensaje)
 {
    /* Crea el punto asociado a la longitud y latitud
       especificadas. */
    var punto = new GLatLng(latitud, longitud);
    /* Crea un marcador asociado a la ubicación anterior */
    var marcador = new GMarker(punto);
    /* Establece que en el evento 'onclick' del marcador
       muestre la burbuja con el mensaje especificado */
     GEvent.addListener(marcador, "click", function()
     {
         mapa.openInfoWindowHtml(punto, mensaje);
     });
     /* Agrega el marcador recién creado al mapa */
     mapa.addOverlay(marcador);
 }</pre><h3>Información de las ciudades de Cuba.</h3><p>Los marcadores del mapa corresponderán como se dijo anteriormente, con cinco ciudades de Cuba que se predefinieron y de las cuales se conoce su ubicación: latitud y longitud.  Su información se almacena en el arreglo puntos en el cual cada una de sus celdas corresponde con una ciudad.</p><pre class="javascript">/* Información para los marcadores del mapa: Ciudades de
 * Cuba. */
 var puntos = new Array(
    {
        'nombre'  : 'La habana',
        'latitud' : 23.132,
        'longitud': -82.364
    },
    {
        'nombre'  : 'Santa Clara',
        'latitud' : 22.4,
        'longitud': -79.967
    },
    {
        'nombre'  : 'Bayamo',
        'latitud' : 20.379,
        'longitud': -76.643
    },
    {
        'nombre'  : 'Las Tunas',
        'latitud' : 20.962,
        'longitud': -76.951
    },
    {
        'nombre'  : 'Manzanillo',
        'latitud' : 20.343,
        'longitud': -77.117
    }
 );</pre><p>Para automatizar el proceso de agregación de los marcadores basados en la información de los <span
style="font-family: courier new,courier;">puntos</span> creamos a la función <span
style="font-family: courier new,courier;">agregarMarcadores</span> cuya misión es la de invocar repetidas veces a la función <span
style="font-family: courier new,courier;">agregarMarcador</span>.  En ella se define además el contenido del globito de cada uno de las ciudades (<span
style="font-family: courier new,courier;">mensaje</span>).</p><pre class="javascript">/*
 * Automatiza el agregar los marcadores basados en la
 * información del arreglo de puntos.
 *
 * @param GMap2   - Referencia externa al mapa.
 * @param Array   - Información de los marcadores a agregar.
 *
 * @return void.
 */
 function agregarMarcadores(mapa, informacion)
 {
    for(var i=0; i&lt;informacion.length; i++)
    {
        var nombre   = puntos[i]['nombre'];
        var latitud  = puntos[i]['latitud'];
        var longitud = puntos[i]['longitud'];
        var mensaje  = "Este es &lt;b&gt;" + nombre + "&lt;/b&gt;,&lt;br /&gt; su latitud es &lt;b&gt;" +
                       latitud + "&lt;/b&gt;&lt;br /&gt; y su longitud es &lt;b&gt;" + longitud + "&lt;/b&gt;.";
        agregarMarcador(mapa, latitud, longitud, mensaje);
    }
 }</pre><h3>Finalmente, el programa principal.</h3><p>En este fragmento del código definimos la ejecución del programa principal del mapa.  Se ejecuta tan pronto como la página se encuentra cargada (<span
style="font-family: courier new,courier;">onLoad</span>) y desarrolla las siguiente actividades.</p><ol><li>Prepara el mapa.</li><li>Verifica que el mapa haya sido creado exitosamente.</li><li>Agrega los marcadores sobre las ciudades especificadas.</li></ol><p>Su código es el siguiente.</p><pre class="javascript">/* Inicio del programa Javascript (setup) */
window.onload = function()
{
    /* Solicita la creación del mapa especificando el DIV
       que lo albergará y la ubicación (latitud, longitud,
       altura). */
    mapa1 = prepararMapa('MiMapa', 21.4, -79.8, 7);
    if(mapa1 == null)
    {
        alert("Su navegador no incluye soporte para Google Maps!");
        return false;
    }
    /* Solicita la agregación de los marcadores de ejemplo
       especificando la referencia al mapa y el arreglo con
       la información de los puntos */
    agregarMarcadores(mapa1, puntos);
    return true;
}</pre><h3>Listo!</h3><p>Probar la página web utilizando un navegador como <a
href="http://getfirefox.com/" target="_blank">Firefox</a>.</p><h2>Enlaces.</h2><ul><li>Programa de demostración &#8211; versión 0.1.<br
/> <a
href="http://demo.jorgeivanmeza.com/GMaps/SimpleDemoCuba/" target="_blank">http://demo.jorgeivanmeza.com/GMaps/SimpleDemoCuba/</a></li><li>Google Maps API Versión 2.<br
/> <a
href="http://code.google.com/apis/maps/" target="_blank">http://code.google.com/apis/maps/</a></li><li>Abrir una cuenta de usuario con Google.<br
/> <a
href="http://mail.google.com/mail/signup" target="_blank">http://mail.google.com/mail/signup</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2009/09/como-crear-un-mapa-con-googlemaps-version-2-en-pasos-simples/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Introducción a StaticMaps de Google</title><link>http://blog.jorgeivanmeza.com/2008/10/introduccion-a-staticmaps-de-google/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduccion-a-staticmaps-de-google</link> <comments>http://blog.jorgeivanmeza.com/2008/10/introduccion-a-staticmaps-de-google/#comments</comments> <pubDate>Wed, 29 Oct 2008 03:47:38 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Móvil]]></category> <category><![CDATA[Software geográfico]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[GIS]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[GoogleMaps]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=854</guid> <description><![CDATA[Introducción StaticMaps es una herramienta de Google que nos permite integrar en nuestras aplicaciones a imagenes estáticas de su cartografía de una manera muy simple.  Como se puede inferir, para utilizarlos es necesario que la aplicación tenga acceso a Internet &#8230; <a
href="http://blog.jorgeivanmeza.com/2008/10/introduccion-a-staticmaps-de-google/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h5>Introducción</h5><p><strong>StaticMaps</strong> es una herramienta de <strong>Google</strong> que nos permite integrar en nuestras aplicaciones a imagenes estáticas de su cartografía de una manera muy simple.  Como se puede inferir, para utilizarlos es necesario que la aplicación tenga acceso a Internet y su acceso se realiza a través de un requerimiento HTTP convencional con ciertos parámetros que se verán a continuación y que permiten refinar el contenido de la imagen del mapa producido.</p><p>Esta herramienta la he utilizado varias veces en diferentes tipos de proyectos como <a
href="http://www.jorgeivanmeza.com/blog/2008/07/07/mi-primer-moblet/" target="_blank">Mi Primer Moblet</a> (móviles), <a
href="http://www.jorgeivanmeza.com/blog/2008/09/09/demostracion-de-georreferenciacion-al-estilo-web-20/" target="_blank">GeoReferenciación con Java</a> (escritorio) y la demostración de <a
href="http://www.jorgeivanmeza.com/blog/2008/09/03/desarrollo-de-sistemas-multiagentes/" target="_blank">MandarinaSocial</a> (agentes de software).</p><p>Para su uso se requiere que el desarrollador registre de manera gratuita el dominio desde donde se va a utilizar el servicio.  El registro se materializa a través de una <em>llave de API</em> particular.  Esta llave se solicita a través del siguiente enlace.</p><p
style="padding-left: 30px;"><a
href="http://code.google.com/apis/maps/signup.html" target="_blank">http://code.google.com/apis/maps/signup.html</a></p><p>El servicio se restringe a un máximo de 1000 requerimientos únicos diarios, siendo este límite aplicado por solicitante (ubicación) y no por llave lo que disminuye el impacto de esta restricción, mas aún cuando las solicitudes repetidas de la misma imagen no son tomadas en cuenta para la estadística de la cuota.</p><p>Un primer acercamiento a la herramienta consiste en jugar un poco con ella utilizando el <a
href="http://gmaps-samples.googlecode.com/svn/trunk/simplewizard/makestaticmap.html" target="_blank">Static Map Wizard</a>.</p><h5>Forma de acceso</h5><p>Como se mencionó anteriormente, la solicitud se inicia requiriendo un URL con ciertos parámetros a través de GET y el servicio retorna una imagen en un formato compatible con web que puede ser insertada en una página web con una etiqueta <span
style="font-family: courier new,courier;">&lt;img&gt;</span> o puede ser manipulada por una aplicación desarrollada en cualquier lenguaje de programación como Java o C#.</p><p>Los siguientes aspectos del StaticMap pueden ser parametrizados a través de los parámetros del URL.</p><ul><li>La ubicación del mapa.</li><li>El tamaño de la imagen generada.</li><li>El nivel de acercamiento.</li><li>El tipo de mapa.</li><li>El lugar de los marcadores.</li><li>El lugar de las rutas trazadas.</li></ul><h5>Estructura general del URL</h5><p>Esta es la estructura básica del URL sobre la cual se estructura el requerimiento del servicio.</p><p
style="padding-left: 30px;">http://maps.google.com/staticmap?<em>PARÁMETROS</em></p><p>La lista de <em>PARÁMETROS</em> consiste en varias secciones separadas entre sí por <span
style="font-family: courier new,courier;">&amp;</span> y que se encuentran construídas con un formato especial y que serán descritas a continuación.</p><p>Estos son los parámetros del servicio suceptibles de personalizarse.</p><ol><li><span
style="font-family: courier new,courier;">center.</span></li><li><span
style="font-family: courier new,courier;">zoom.</span></li><li><span
style="font-family: courier new,courier;">size.</span></li><li><span
style="font-family: courier new,courier;">format.</span></li><li><span
style="font-family: courier new,courier;">maptype.</span></li><li><span
style="font-family: courier new,courier;">markers.</span></li><li><span
style="font-family: courier new,courier;">path.</span></li><li><span
style="font-family: courier new,courier;">frame.</span></li><li><span
style="font-family: courier new,courier;">key.</span></li></ol><h5>Ubicaciones</h5><p>Las ubicaciones georreferenciadas son especificadas de la forma latitud y longitud como dos valores reales con 6 dígitos decimales de precisión y separados por una coma: 5.07,-75.521.</p><p>Los valores válidos de una latitud varían desde -90 hasta 90 grados mientras que los valores válidos para una longitud varía desde -180 hasta 180 grados.</p><h5>Parámetro Key</h5><p>Es obligatorio y se utiliza para especificar la llave del API que se obtuvo inicialmente.  <span
style="text-decoration: underline;">Sin esto, es imposible acceder al servicio.</span></p><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=9&amp;size=500x300&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=5&amp;size=500&#215;300&amp;<strong>key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg</strong></a></p><h5>Parámetro Center</h5><p>Es obligatorio pero se convierte en opcional bajo ciertas circunstancias.  Determina la ubicación al rededor de la cual se centrará el mapa generado.</p><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=9&amp;size=500x300&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?<strong>center=5.07,-75.521</strong></a></p><p>El mapa anterior se encuentra centrado al rededor de las coordenadas de Manizales, Caldas.</p><h5>Parámetro Zoom</h5><p>Es obligatorio pero se convierte en opcional bajo ciertas circunstancias.  Determina el nivel de acercamiento al mapa.</p><p>Es definido por un número entero que varía entre 0 (menor) hasta 19 (máxima).  Debe tenerse en cuenta que no todos los niveles de acercamiento están disponibles para todos los tipos de mapas.</p><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500x300&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?center=5.07,-75.521&amp;<strong>zoom=11</strong></a></p><p>El mapa anterior determina un nivel 11 de acercamiento sobre Manizales.</p><h5>Parámetro Size.</h5><p>Es obligatorio.  Especifica el tamaño de la imagen generada.</p><p>Su valor se especifica por un ancho y un alto separados por la letra '<span
style="font-family: courier new,courier;">x</span>' y su unidad es en pixels: 500&#215;300.  El valor máximo de estas dimensiones es 640&#215;480.</p><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500x300&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;<strong>size=500&#215;300</strong></a></p><p>La imagen generada a partir del requerimiento anterior tiene un ancho de 500px y un alto de 300px.</p><h5>Parámetro Format.</h5><p>Es opcional y determina el tipo de formato de la imagen generada.  Su selección depende de la relación tamaño/calidad deseada.  Si se omite, su valor por defecto es GIF.</p><p>Los posibles valores para este parámetro son los siguientes.</p><ul><li><span
style="font-family: courier new,courier;">gif </span>(por defecto).</li><li><span
style="font-family: courier new,courier;">jpg</span></li><li><span
style="font-family: courier new,courier;">jpg-baseline</span> (no progresivo)</li><li><span
style="font-family: courier new,courier;">png8 </span>(8 bits)</li><li><span
style="font-family: courier new,courier;">png32 </span>(32 bits)</li></ul><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500x300&amp;format=png8&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500&#215;300&amp;<strong>format=png8</strong></a></p><p>El ejemplo anterior genera una imagen con formato PNG de 8 bits.</p><h5>Parámetro MapType.</h5><p>Es opcional y determina el tipo de cartografía a utilizarse para la generación de la imagen.  Si se omite, su valor por defecto es <span
style="font-family: courier new,courier;">roadmap</span>.</p><p>Los posibles valores para este parámetro son los siguientes.</p><ul><li><span
style="font-family: courier new,courier;">roadmap </span>(por defecto).</li><li><span
style="font-family: courier new,courier;">mobile</span>.  Presenta mejoras gráficas para la visualización en dispositivos móviles.</li><li><span
style="font-family: courier new,courier;">satellite</span>. Muestra las imagenes de satélite.</li><li><span
style="font-family: courier new,courier;">terrain</span>. Muesta el mapa del relieve y la vegetación.</li><li><span
style="font-family: courier new,courier;">hybrid</span>. Mezcla el contenido de los tipos <span
style="font-family: courier new,courier;">roadmap</span> y <span
style="font-family: courier new,courier;">satellite</span>.</li></ul><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500x300&amp;format=png8&amp;maptype=hybrid&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?center=5.07,-75.521&amp;zoom=11&amp;size=500&#215;300&amp;format=png8&amp;<strong>maptype=hybrid</strong></a></p><p>El ejemplo anterior modifica el tipo de mapa visto hasta ahora (<span
style="font-family: courier new,courier;">roadmap</span>) y presenta un mapa estilo híbrido de la misma ubicación.</p><h5>Parámetro Markers.</h5><p>Es opcional y permite especificar y personalizar los marcadores que referenciarán ubicaciones importantes en el mapa.  Es posible especificar hasta 50 marcadores diferentes por mapa.</p><p>Cuando se especifica el parámetro <span
style="font-family: courier new,courier;">markers</span> no es necesario especificar a los parámetros <span
style="font-family: courier new,courier;">center</span> y <span
style="font-family: courier new,courier;">zoom</span> ya que estos se pueden calcular automáticamente.</p><p>La información de los marcadores se especifica con una cadena separada por '<span
style="font-family: courier new,courier;">|</span>' (<span
style="font-family: courier new,courier;">%7C</span>) de la siguiente manera.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">markers=infoMarcador1|infoMarcador2|infoMarcador3|&#8230;</span></p><p>La información de los marcadores incluye datos tanto de su ubicación como de su presentación.  Cada marcador se crea con la siguiente estructura.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">{latitud},{longitud},{tamaño}{color}{identificador}</span></p><p>El siginificado de cada uno de estos campos se describe a continuación.</p><ul><li><span
style="font-family: courier new,courier;">latitud </span>(requerido).  Latitud de la ubicación del marcador.</li><li><span
style="font-family: courier new,courier;">longitud </span>(requerido).  Longitud de la ubicación del marcador.</li><li><span
style="font-family: courier new,courier;">tamaño </span>(opcional).  Tamaño de la imagen del marcador.  Puede tomar uno de los siguientes valores.<ul><li><span
style="font-family: courier new,courier;">tiny</span></li><li><span
style="font-family: courier new,courier;">mid </span>(por defecto)</li><li><span
style="font-family: courier new,courier;">small</span></li></ul></li><li><span
style="font-family: courier new,courier;">color </span>(opcional).  Determina el color de la imagen del marcador.  Puede tomar una de las siguientes constantes.<ul><li><span
style="font-family: courier new,courier;">black</span></li><li><span
style="font-family: courier new,courier;">brown</span></li><li><span
style="font-family: courier new,courier;">green</span></li><li><span
style="font-family: courier new,courier;">purple</span></li><li><span
style="font-family: courier new,courier;">yellow</span></li><li><span
style="font-family: courier new,courier;">blue</span></li><li><span
style="font-family: courier new,courier;">gray</span></li><li><span
style="font-family: courier new,courier;">orange</span></li><li><span
style="font-family: courier new,courier;">red</span><span
style="font-family: courier new,courier;"> </span>(por defecto)</li><li><span
style="font-family: courier new,courier;">white</span></li></ul></li><li><span
style="font-family: courier new,courier;">identificador </span>(opcional).  Permite especificar un carácter alfanumérico y en minúsculas para identificar al marcador.  Debe tenerse en cuenta que este identificador sólo aplica para marcadores tamaño <span
style="font-family: courier new,courier;">mid</span>.  Su valor por defecto es el punto.</li></ul><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?size=500x300&amp;format=png8&amp;maptype=hybrid&amp;markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?size=500&#215;300&amp;format=png8&amp;maptype=hybrid&amp;<strong>markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda</strong></a></p><p>El ejemplo anterior muestra el mapa del eje cafetero colombiano resaltando sus ciudades con marcadores de la siguiente manera: Manizales (amarillo), Pereira (azul) y Armenia (rojo).</p><h5>Parámetro Path.</h5><p>Es opcional y permite especificar y personalizar rutas sobre el mapa que conectan a dos o mas puntos georreferenciados.  El límite es el de máximo 100 puntos por ruta.</p><p>El parámetro se define de manera similar a <span
style="font-family: courier new,courier;">markers</span> siguiendo el siguiente formato.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">path=tipoColor:#color,weight:pesoRuta|punto1|punto2|punto3|&#8230;</span></p><p>El siginificado de cada uno de estos campos se describe a continuación.</p><ul><li><span
style="font-family: courier new,courier;">tipoColor</span>.  Especifica el tipo de formato del color.  Puede tomar uno de los siguientes valores.<ul><li>rgb.  Esquema RGB estándar con valores de 24 bits de la forma <span
style="font-family: courier new,courier;">0xffffff</span>.  Su nivel de opacidad por defecto es de 50%.</li><li>rgba.  Utiliza valores de 32 bits de la forma <span
style="font-family: courier new,courier;">0xffffffff</span>.  El nivel de opacidad está dado por el cuarto byte (últimos dos carácteres) que conforman el canal alfa de transparencia.</li></ul></li><li><span
style="font-family: courier new,courier;">weight</span>.  Especifica el grosor de la ruta en pixels.</li></ul><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?size=500x300&amp;format=png8&amp;maptype=hybrid&amp;markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&amp;path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?size=500&#215;300&amp;format=png8&amp;maptype=hybrid&amp;markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&amp;<strong>path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681</strong></a></p><p>En este ejemplo se agrega una ruta azul entre Armenia &#8211; Pereira &#8211; Manizales sobre el ejemplo inmediatamente anterior.</p><h5>Parámetro Frame.</h5><p>Es opcional y especifica si la imagen resultante se debe o no mostrar con un borde azul de 5px y con 55% de opacidad a su alrededor.  Por defecto no se muestra.</p><p
style="padding-left: 30px;"><a
href="http://maps.google.com/staticmap?size=500x300&amp;format=png8&amp;maptype=hybrid&amp;markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&amp;path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681&amp;frame=true&amp;key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg" target="_blank">http://maps.google.com/staticmap?size=500&#215;300&amp;format=png8&amp;maptype=hybrid&amp;markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&amp;path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681&amp;<strong>frame=true</strong></a></p><p>Enlaces:</p><ul><li><a
href="http://code.google.com/apis/maps/signup.html" target="_blank">Sign Up for the Google Maps API</a>.</li><li><a
href="http://code.google.com/apis/maps/documentation/staticmaps/" target="_blank">Static Maps API Developer's Guide</a>.</li><li><a
href="http://gmaps-samples.googlecode.com/svn/trunk/simplewizard/makestaticmap.html" target="_blank">Static Map Wizard</a>.</li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2008/10/introduccion-a-staticmaps-de-google/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Demostración de georreferenciación al estilo web 2.0</title><link>http://blog.jorgeivanmeza.com/2008/09/demostracion-de-georreferenciacion-al-estilo-web-20/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=demostracion-de-georreferenciacion-al-estilo-web-20</link> <comments>http://blog.jorgeivanmeza.com/2008/09/demostracion-de-georreferenciacion-al-estilo-web-20/#comments</comments> <pubDate>Wed, 10 Sep 2008 02:43:37 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[Software geográfico]]></category> <category><![CDATA[GeoNames]]></category> <category><![CDATA[GIS]]></category> <category><![CDATA[GoogleMaps]]></category> <category><![CDATA[Java]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=652</guid> <description><![CDATA[No es que me sienta viejo aún, pero como me hubiera gustado que como ahora, hubieran existido tantas cosas y que hubieran estado al alcance de los desarrolladores cuando yo era estudiante hace un tiempo ya.  Gloriosa época de muchas &#8230; <a
href="http://blog.jorgeivanmeza.com/2008/09/demostracion-de-georreferenciacion-al-estilo-web-20/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>No es que me sienta viejo aún, pero como me hubiera gustado que como ahora, hubieran existido tantas cosas y que hubieran estado al alcance de los desarrolladores cuando yo era estudiante hace un tiempo ya.  Gloriosa época de muchas trasnochadas expermientando cositas, en particular con Java.</p><p>Desafortunadamente, en mi época de estudiante me tocó un mundo no tan interesante como el actual, ya que empezamos con C/C++ para MS-DOS y en esa época el reto adicional era mostrar imágenes en los programas y simular el ambiente 3D de ventanas con sólo las líneas y cuadrados del <a
href="http://en.wikipedia.org/wiki/Borland_Graphics_Interface" target="_blank">BGI </a> <img
src='http://blog.jorgeivanmeza.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /></p><p>Java llegó después y me tocó la época en que <em>todos</em> estabamos aprendiendo y las cosas emocionantes empezaron a llegar con el tiempo y con Internet.  Recuerdo que ya terminando mis clases, cuando abrí mis primeras direcciones de correo en USA.net y Hotmail, mis compañeros estuvieron renuentes por un buen tiempo porque no le veían la utilidad al correo electrónico o simplemente porque no tenían quien les escribiera.  Pero por suerte ya todo eso pasó.</p><p>Ahora hay muchas cosas, tantas que no alcanza el tiempo para buscarlas, estudiarlas y hacer algo con ellas.  Inclusive hay muchas cosas del mismo estilo.  Todo un mundo de delicias para escoger.  Lo que falta es tiempo.  El trabajo y el cansancio son malos amigos para la investigación.  Ahora, donde uno mire, hay cosas para probar y lo mejor de todo es que la mayoría son abiertas y grátis &#8230; digo libres (<em>free</em>), el límite es el tiempo y la pereza mental de las personas.</p><p>Hoy, a pesar de que tengo muchos informes atrasados, me dieron ganas de hacer una aplicación muy sencilla para demostrar un par de estas librerías que están allí, esperando que hagamos algo interesante con ellas.   Este ejemplo muy simple me tomó al rededor de 2 horas implementarlo y eso porque son muy lento para hacer las interfaces de usuario desde código.</p><p>Así surgió la <strong>demostración de georreferenciación al estilo web 2.0</strong> que permite visualizar el mapa de cualquier ubicación del mundo y ubicar sobre él marcadores georreferenciados.</p><p>Para esto utiliza los servicios de <a
href="http://maps.google.com/" target="_blank">Google Maps</a> para la generación de las imágenes y <a
href="http://www.geonames.org/" target="_blank">GeoNames </a>para la georreferenciación, es decir, para convertir las ubicaciones (<span
style="font-family: courier new,courier;">Manizales, Caldas, Colombia</span>) en sus respectivas duplas latitud/longitud para poder ser relacionadas geográficamente.</p><p><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/09/screenshot.jpg"><img
class="aligncenter size-full wp-image-693" title="screenshot" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/09/screenshot.jpg" alt="" width="500" height="375" /></a></p><p>En la parte izquierda se aprecia la lista con las ubicaciones seleccionadas que corresponden con las marcas rojas en el mapa, en la parte derecha está el mapa junto con tres barras de desplazamiento que regulan su presentación y en la parte inferior se encuentran los botones de opciones.</p><p>El demo le permite al usuario <strong>Agregar </strong>y <strong>Remover</strong> ubicaciones como puntos seleccionados.  Como se mencionó, estas se ingresan con los nombres de las ubicaciones y el sistema obtiene su ubicación geográfica a través de la consulta de un servicio web.  Es posible en cualquier momento,<strong> Centrar</strong> el mapa al rededor de cualquiera de los puntos seleccionados almacendos.</p><p>La manipulación del mapa se realiza con las barras de desplazamiento.  La naranja (derecha) corresponde con el zoom: hacia abajo aumenta, haciendo mayor el acercamiento del mapa.  La horizontal, azul, corresponde con la longitud y la vertical, verde, corresponde con la latitud.  Cuando se modifica cualquiera de estos valores se deberá solicitar la actualización del mapa presionando el botón <strong>Refrescar</strong>.</p><p>La aplicación ha sido desarrollada en Java por lo que su código es muy claro y modular.  En términos de la implementación, el acceso al <em>webservice</em> de GeoNames utiliza su propio API para el cual se descargaron dos archivos: <span
style="font-family: courier new,courier;">geonames-1.0-java5.jar</span> y <span
style="font-family: courier new,courier;">jdom-1.0.jar</span>.</p><p>La georrefernciación no podría ser más fácil.</p><pre lang="java">    public static GeoLocation locate(String location) throws Exception
    {
        GeoLocation result = new GeoLocation();
        // Creates the toponym searcher
        ToponymSearchCriteria searchCriteria = new ToponymSearchCriteria();
        // Sets the criteria based on the specified location
        searchCriteria.setQ(location);
        // Request the geolocalization to the webserver
        ToponymSearchResult searchResult = WebService.search(searchCriteria);
        // Gets the results
        List toponyms = searchResult.getToponyms();
        // Checks if there were results
        if(toponyms == null || toponyms.size() == 0)
            return null;
        // Gets the first result of all (could be many)
        Toponym first = toponyms.get(0);
        // Prepares the result with its information
        result.put("geoNameId",   first.getGeoNameId()   + "");
        result.put("name",        first.getName()        + "");
        result.put("latitude",    first.getLatitude()    + "");
        result.put("longitude",   first.getLongitude()   + "");
        result.put("countryCode", first.getCountryCode() + "");
        result.put("countryName", first.getCountryName() + "");
        return result;
    }</pre><p>La clase <span
style="font-family: courier new,courier;">GeoLocation</span> que utilizo para manejar el resultado no es mas que un <span
style="font-family: courier new,courier;">Hashtable&lt;String, String&gt;</span> con algunos adendos para facilitar su uso.</p><p>Por otro lado, la generación del mapa requiere aún menos ciencia aunque la realizo en dos pasos discretos que en general no incluyen nada extraño.</p><pre lang="java">    public String prepareUrl()
    {
		String markers = "";
		// Walks thru all the points to create its markers
		for(int i=0; i
<points.size(); i++)
		{
			// Reads the points one by one
			GeoLocation point = points.elementAt(i);
			// The markers will be green
			String color = "green";
			// Sets the point location information based on its longitude and latitude
			String pointLocation = point.get("latitude") + "," +
			                       point.get("longitude") + "," +
			                       color +
			                       point.get("name").toLowerCase().charAt(0);
			// Adds it to the markers accumulator
			markers += pointLocation + ((i < points.size() - 1) ? "%7C" : "");
		}
		// Prepares the full URL based on markers information, centered location, size, zoom and API key
		String url = "http://maps.google.com/staticmap?" +
		             "center=" + centerLatitude + "," + centerLongitude + "&#038;" +
		             "markers=" + markers + "&#038;" +
		             "zoom=" + zoomLevel + "&#038;" +
		             "size=" + sizeWidth + "x" + sizeHeight + "&#038;" +
		             "key=" + apiKey;
		// System.out.println(url);
		return url;
    }</pre><p>En el primer paso preparo el URL del consulta al servicio basado en información como la coordenada centro del mapa, el nivel de zoom, el tamaño de la imagen, los puntos seleccionados (marcadores) y la llave del API que debe ser privada y es única para cada sitio web (<a
href="http://en.wikipedia.org/wiki/Fqdn" target="_blank">FQDN</a>), aunque para el caso específico de aplicaciones de escritorio no es muy relevante a pesar de ser obligatoria.  La llave del API puede ser obtenida de manera gratuita por cualquier desarrollador desde esta <a
href="http://code.google.com/apis/maps/signup.html" target="_blank">dirección</a>.</p><pre lang="java">    public Image prepareImage(String url) throws Exception
    {
        Image image = ImageIO.read(new URL(url));
        return image;
    }</pre><p>El segundo paso se relaciona con consultar el servicio de Google utilizando el URL recién generado, leer los bytes que conforman la imagen y crear con ellos un objeto Image para ser mostrado posteriormente en la interfaz de usuario.  Con Java, este procedimiento es extremadamente sencillo: 1 línea de código.</p><p>Para su uso se deberá tener cuidado en el manejo de las posibles excepciones que pueda lanzar el requerimiento como por ejemplo, producto de un fallo de red.</p><pre lang="java">        // Gets the map image
        Image imageMap = mapService.getMap();
        // Checks if was received
        if(imageMap == null)
        {
            JOptionPane.showMessageDialog(this, "El mapa no se pudo recuperar.",
                    "Error recuperando mapa", JOptionPane.ERROR_MESSAGE);
            return;
        }
        // Puts the map on the gui
        map.setIcon(new ImageIcon(imageMap));</pre><p>Teniendo el objeto <span
style="font-family: courier new,courier;">Image</span> lo podemos poner en cualquier componente de AWT/Swing.  Por facilidad, yo utilizo un <span
style="font-family: courier new,courier;">JLabel </span>que incluye el soporte de íconos (<span
style="font-family: courier new,courier;">ImageIcon</span>) los cuales se basan en objetos de imagen.</p><p>Como se puede apreciar, la complejidad de la aplicación es muy baja por lo que reitero: <strong>la imaginación es el límite</strong>.</p><p>Es posible acceder a la aplicación desde web sin instalar ningún archivo local desde el siguiente <a
href="http://demo.jorgeivanmeza.com/Java/DemoGeoReferenceMap/0.1/DemoGeoReferenceMap.jnlp">enlace</a> o ejecutando el siguiente comando en una consola/símbolo del sistema operativo:</p><p><span
style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;$ javaws http://demo.jorgeivanmeza.com/Java/DemoGeoReferenceMap/0.1/DemoGeoReferenceMap.jnlp</span></p><p>Enlace:</p><ul><li><a
href="http://demo.jorgeivanmeza.com/Java/DemoGeoReferenceMap/0.1/DemoGeoReferenceMap_0.1.zip">Código fuente y binario de la aplicación de demostración</a> (incluye librerías de GeoNames requeridas).</li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2008/09/demostracion-de-georreferenciacion-al-estilo-web-20/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Introducción práctica a Google Mapplets</title><link>http://blog.jorgeivanmeza.com/2008/07/introduccion-practica-a-google-mapplets/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduccion-practica-a-google-mapplets</link> <comments>http://blog.jorgeivanmeza.com/2008/07/introduccion-practica-a-google-mapplets/#comments</comments> <pubDate>Tue, 15 Jul 2008 04:37:45 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Software geográfico]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[GIS]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[GoogleMapplets]]></category> <category><![CDATA[GoogleMaps]]></category> <category><![CDATA[GooglePages]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=409</guid> <description><![CDATA[Siguiendo mi premisa "de lo que no se pueda aprender entonces es inútil y prescindible" tuve el deseo este fin de semana de escribir una introducción a Google Mapplets con que he jugado un poco en el último par de &#8230; <a
href="http://blog.jorgeivanmeza.com/2008/07/introduccion-practica-a-google-mapplets/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Siguiendo mi premisa "<em>de lo que no se pueda aprender entonces es inútil y prescindible</em>" tuve el deseo este fin de semana de escribir una introducción a <strong>Google Mapplets</strong> con que he jugado un poco en el último par de meses.</p><p>Fruto de ese deseo surgió la <strong>Introducción práctica a Google Mapplets</strong> la cual introduce los conceptos básicos del servicio y lleva de la mano al desarrollador a través de la implementación de una demostración simple que ejemplifica de manera sencilla los conceptos expuestos y parte del API del servicio.</p><p>El lector deberá estar familiarizado con el desarrollo de software en general, la utilización de JavaScript y XML.</p><p><strong>Introducción al desarrollo de Mapplets.</strong></p><div
id="__ss_514814" style="width: 425px; text-align: left;"><object
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="allowFullScreen" value="true" /><param
name="allowScriptAccess" value="always" /><param
name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=introduccin-al-desarrollo-de-google-mapplets-1216187116637612-9" /><embed
type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=introduccin-al-desarrollo-de-google-mapplets-1216187116637612-9" allowscriptaccess="always" allowfullscreen="true"></embed></object></div><div>&nbsp;</div><p>● Que son los Mapplets.<br
/> ● Ventajas y desventajas frente a Google Maps.<br
/> ● Diferencias importantes con el API de Google Maps.<br
/> ● Requerimientos para el desarrollo.<br
/> ● Como es un Mapplet (estructura).<br
/> ● Herramientas para el desarrollo.<br
/> ● Acceso a Mis Mapas y al Directorio de Mapas.<br
/> ● Como desarrollar Mapplets.<br
/> ● Plantilla base de un Mapplet.<br
/> ● Enlaces de interés.</p><p><strong>Desarrollo de Mi Primer Mapplet.</strong></p><div
id="__ss_514815" style="width: 425px; text-align: left;"><object
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="allowFullScreen" value="true" /><param
name="allowScriptAccess" value="always" /><param
name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=desarrollo-de-mi-primer-mapplet-1216187395220531-9" /><embed
type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=desarrollo-de-mi-primer-mapplet-1216187395220531-9" allowscriptaccess="always" allowfullscreen="true"></embed></object></div><div>&nbsp;</div><p>● Plantilla base de un Mapplet.<br
/> ● Desarrollo e implementación de MiPrimerMapplet.<br
/> ● Publicación de Mapplets con Google Pages.<br
/> ● Agregar el Mapplet a Mis Mapas.<br
/> ● Compartir el acceso a los Mapplets desarrollados.<br
/> ● Enlaces de interés.</p><p>El ejemplo práctico de esta presentación puede consultarse en el siguiente enlace.</p><p><a
href="http://maps.google.com/ig/add?synd=mpl&amp;pid=mpl&amp;moduleurl=http://demo.jorgeivanmeza.com/GMaps/MiPrimerMapplet/ultimo/MiPrimerMapplet.xml" target="_blank">http://maps.google.com/ig/add?synd=mpl&amp;pid=mpl&amp;moduleurl=http://demo.jorgeivanmeza.com/GMaps/MiPrimerMapplet/ultimo/MiPrimerMapplet.xml</a></p><p>Mientras que el código fuente del mismo ejemplo puede consultarse a través de este enlace.</p><p><a
href="http://demo.jorgeivanmeza.com/GMaps/MiPrimerMapplet/ultimo/MiPrimerMapplet.xml" target="_blank">http://demo.jorgeivanmeza.com/GMaps/MiPrimerMapplet/ultimo/MiPrimerMapplet.xm</a>l</p><p>Enlaces:</p><ul><li><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/07/introduccion-al-desarrollo-de-google-mapplets.pdf" target="_blank">Introducción al desarrollo de Google Mapplets</a>.</li><li><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/07/desarrollo-de-mi-primer-mapplet.pdf" target="_blank">Desarrollo de Mi Primer Mapplet</a>.</li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2008/07/introduccion-practica-a-google-mapplets/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>De GoogleMaps a LocalLive</title><link>http://blog.jorgeivanmeza.com/2007/08/de-googlemaps-a-locallive/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=de-googlemaps-a-locallive</link> <comments>http://blog.jorgeivanmeza.com/2007/08/de-googlemaps-a-locallive/#comments</comments> <pubDate>Mon, 27 Aug 2007 21:09:31 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[GoogleMaps]]></category> <category><![CDATA[LocalLive]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=118</guid> <description><![CDATA[Después de tener todo prácticamente listo con GoogleMaps aparece un problema inesperado. No habíamos notado que a diferencia de GoogleEarth, GoogleMaps no muestra la división política ni las etiquetas de nuestros departamentos y municipios. Estuve buscando una posible solución y &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/08/de-googlemaps-a-locallive/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Después de tener todo prácticamente listo con <a
href="http://maps.google.es/maps">GoogleMaps</a> aparece un problema <em>inesperado</em>.  No habíamos notado que a diferencia de <a
href="http://earth.google.com/">GoogleEarth</a>, GoogleMaps no muestra la división política ni las etiquetas de nuestros departamentos y municipios.  Estuve buscando una posible solución y no la encontré.  Según comentarios, GoogleMaps sólo muestra esta información para pocos países.</p><p>Evaluando el servicio de Microsoft, <a
href="http://local.live.com/">LocalLive</a>,  encontré que este si muestra toda la información que necesito.  No quería hacer el cambio, pero tocó.  Me gusta mas Google y tengo mucha mas información que del producto de Microsoft pero no hay nada que hacer si no muestra los municipios.</p><p>Después de dos horas de pruebas y armado con únicamente con la API y los ejemplos que trae inmersos en ella realicé mi primer demo estático con las funciones que necesito.</p><ul><li>Mostrar un mapa.</li><li>Cambiar el estilo a <em>híbrido</em>.</li><li>Ubicarlo en el espacio que deseo.</li><li>Capturar y mostrar la información relacionada con los eventos de click y de zoom.</li><li>Manipular el control por defecto (ocultarlo).</li><li>Agregar marcas y anexarles información relacionada, incluyendo un icono personalizado.</li><li>Revisar la documentación respecto a su licencia.</li></ul><p>El siguiente paso es posibilitar la manipulación de la información (búsquedas) y su persistencia en bases de datos.</p><p>Esta primer aproximación al servicio LocalLive puede accederse en el siguiente URL: <a
href="http://demo.jorgeivanmeza.com/LocalLive/too_simple_demo/start.html" target="_blank">http://demo.jorgeivanmeza.com/LocalLive/too_simple_demo/start.html</a></p><p>Una aproximación similar había hecho con GoogleMaps hace un tiempo.  Esta puede consultarse en  el siguiente URL: <a
href="http://demo.jorgeivanmeza.com/GMaps/too_simple_demo/start.html" target="_blank">http://demo.jorgeivanmeza.com/GMaps/too_simple_demo/start.html</a></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/08/de-googlemaps-a-locallive/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
