Introducción a StaticMaps de Google

Desarrollo de software, Móvil, Software geográfico, Web October 28th, 2008

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 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.

Esta herramienta la he utilizado varias veces en diferentes tipos de proyectos como Mi Primer Moblet (móviles), GeoReferenciación con Java (escritorio) y la demostración de MandarinaSocial (agentes de software).

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 llave de API particular.  Esta llave se solicita a través del siguiente enlace.

http://code.google.com/apis/maps/signup.html

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.

Un primer acercamiento a la herramienta consiste en jugar un poco con ella utilizando el Static Map Wizard.

Forma de acceso

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 <img> o puede ser manipulada por una aplicación desarrollada en cualquier lenguaje de programación como Java o C#.

Los siguientes aspectos del StaticMap pueden ser parametrizados a través de los parámetros del URL.

  • La ubicación del mapa.
  • El tamaño de la imagen generada.
  • El nivel de acercamiento.
  • El tipo de mapa.
  • El lugar de los marcadores.
  • El lugar de las rutas trazadas.
Estructura general del URL

Esta es la estructura básica del URL sobre la cual se estructura el requerimiento del servicio.

http://maps.google.com/staticmap?PARÁMETROS

La lista de PARÁMETROS consiste en varias secciones separadas entre sí por & y que se encuentran construídas con un formato especial y que serán descritas a continuación.

Estos son los parámetros del servicio suceptibles de personalizarse.

  1. center.
  2. zoom.
  3. size.
  4. format.
  5. maptype.
  6. markers.
  7. path.
  8. frame.
  9. key.
Ubicaciones

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.

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.

Parámetro Key

Es obligatorio y se utiliza para especificar la llave del API que se obtuvo inicialmente.  Sin esto, es imposible acceder al servicio.

http://maps.google.com/staticmap?center=5.07,-75.521&zoom=5&size=500x300&key=ABQIAAAAAa_xc3cplYGMwVbx_zW2chTWZSld1Wm-gV17JxrvtQa7WXWbRRTOL98qj5hk-yEw1n5LrYmEoAwzOg

Parámetro Center

Es obligatorio pero se convierte en opcional bajo ciertas circunstancias.  Determina la ubicación al rededor de la cual se centrará el mapa generado.

http://maps.google.com/staticmap?center=5.07,-75.521

El mapa anterior se encuentra centrado al rededor de las coordenadas de Manizales, Caldas.

Parámetro Zoom

Es obligatorio pero se convierte en opcional bajo ciertas circunstancias.  Determina el nivel de acercamiento al mapa.

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.

http://maps.google.com/staticmap?center=5.07,-75.521&zoom=11

El mapa anterior determina un nivel 11 de acercamiento sobre Manizales.

Parámetro Size.

Es obligatorio.  Especifica el tamaño de la imagen generada.

Su valor se especifica por un ancho y un alto separados por la letra 'x' y su unidad es en pixels: 500x300.  El valor máximo de estas dimensiones es 640x480.

http://maps.google.com/staticmap?center=5.07,-75.521&zoom=11&size=500x300

La imagen generada a partir del requerimiento anterior tiene un ancho de 500px y un alto de 300px.

Parámetro Format.

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.

Los posibles valores para este parámetro son los siguientes.

  • gif (por defecto).
  • jpg
  • jpg-baseline (no progresivo)
  • png8 (8 bits)
  • png32 (32 bits)

http://maps.google.com/staticmap?center=5.07,-75.521&zoom=11&size=500x300&format=png8

El ejemplo anterior genera una imagen con formato PNG de 8 bits.

Parámetro MapType.

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 roadmap.

Los posibles valores para este parámetro son los siguientes.

  • roadmap (por defecto).
  • mobile.  Presenta mejoras gráficas para la visualización en dispositivos móviles.
  • satellite. Muestra las imagenes de satélite.
  • terrain. Muesta el mapa del relieve y la vegetación.
  • hybrid. Mezcla el contenido de los tipos roadmap y satellite.

http://maps.google.com/staticmap?center=5.07,-75.521&zoom=11&size=500x300&format=png8&maptype=hybrid

El ejemplo anterior modifica el tipo de mapa visto hasta ahora (roadmap) y presenta un mapa estilo híbrido de la misma ubicación.

Parámetro Markers.

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.

Cuando se especifica el parámetro markers no es necesario especificar a los parámetros center y zoom ya que estos se pueden calcular automáticamente.

La información de los marcadores se especifica con una cadena separada por '|' (%7C) de la siguiente manera.

markers=infoMarcador1|infoMarcador2|infoMarcador3|...

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.

{latitud},{longitud},{tamaño}{color}{identificador}

El siginificado de cada uno de estos campos se describe a continuación.

  • latitud (requerido).  Latitud de la ubicación del marcador.
  • longitud (requerido).  Longitud de la ubicación del marcador.
  • tamaño (opcional).  Tamaño de la imagen del marcador.  Puede tomar uno de los siguientes valores.
    • tiny
    • mid (por defecto)
    • small
  • color (opcional).  Determina el color de la imagen del marcador.  Puede tomar una de las siguientes constantes.
    • black
    • brown
    • green
    • purple
    • yellow
    • blue
    • gray
    • orange
    • red (por defecto)
    • white
  • identificador (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 mid.  Su valor por defecto es el punto.

http://maps.google.com/staticmap?size=500x300&format=png8&maptype=hybrid&markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda

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).

Parámetro Path.

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.

El parámetro se define de manera similar a markers siguiendo el siguiente formato.

path=tipoColor:#color,weight:pesoRuta|punto1|punto2|punto3|...

El siginificado de cada uno de estos campos se describe a continuación.

  • tipoColor.  Especifica el tipo de formato del color.  Puede tomar uno de los siguientes valores.
    • rgb.  Esquema RGB estándar con valores de 24 bits de la forma 0xffffff.  Su nivel de opacidad por defecto es de 50%.
    • rgba.  Utiliza valores de 32 bits de la forma 0xffffffff.  El nivel de opacidad está dado por el cuarto byte (últimos dos carácteres) que conforman el canal alfa de transparencia.
  • weight.  Especifica el grosor de la ruta en pixels.

http://maps.google.com/staticmap?size=500x300&format=png8&maptype=hybrid&markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681

En este ejemplo se agrega una ruta azul entre Armenia - Pereira - Manizales sobre el ejemplo inmediatamente anterior.

Parámetro Frame.

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.

http://maps.google.com/staticmap?size=500x300&format=png8&maptype=hybrid&markers=5.07,-75.521,midyellowm|4.813,-75.696,midbluep|4.534,-75.681,midreda&path=rgb:0x0000ff,weight:5|5.07,-75.521|4.813,-75.696|4.534,-75.681&frame=true

Enlaces:

Tags: , ,

Transacciones de base de datos con Kohana

Desarrollo de software, Móvil, Software, Web September 25th, 2008

Aparentemente la versión actual de Kohana (2.2) aún no cuenta con soporte para transacciones en su clase Database.

Buscando entre los foros encontré una solución sencilla, rápida y elegante, sin embargo me preocupa que, a pesar de que utiliza la sintaxis de CodeIgniter, no vaya a ser compatible con la siguiente liberación de Kohana de la cual no encontré documentación.

Así que por ahora voy a establecer las transacciones de manera manual y -espero- compatible con las bases de datos y futuras liberaciones de Kohana.

Iniciar la transacción.

$this -> db -> query('SET AUTOCOMMIT=0');
$this -> db -> query('BEGIN');

Aceptar/ejecutar la transacción.

$this -> db -> query('COMMIT');
$this -> db -> query('SET AUTOCOMMIT=1');

Cancelar/devolver la transacción.

$this -> db -> query('ROLLBACK');
$this -> db -> query('SET AUTOCOMMIT=1');

Nota: para Microsoft SQL Server los comandos deberán ser BEGIN TRANSACTION, COMMIT TRANSACTION y ROLLBACK TRANSACTION. Las modificaciones al AUTOCOMMIT no son válidas para este motor de base de datos.

Enlaces:

Tags: , , ,

Evolución de los teléfonos móviles

Móvil September 11th, 2008

Esta es una perspectiva intersante de como ha sido la evolución de los teléfonos móviles desde sus comienzos hasta practicamente la actualidad.

Cuáles ha tenido ?

Tags:

Conferencia MobileProcessing/Prototyping

Desarrollo de software, Móvil September 3rd, 2008

El día de hoy estuve en una charla de Prototyping realizada por el profesor Marlonj en el CIDCA de Pereira, asistí gracias a la invitación de Alexander Parrales.

En las horas de la mañana se realizó también una charla acerca de MobileProcessing para el desarrollo de aplicaciones móviles basadas en Java y orientadas principalmente al diseño visual.  Con este lenguaje he hecho algunos pinitos, sin embargo no he superado aún la programación tan desorientada a objetos que se requiere utilizar para implementar las interfaces de usuario.  Mas adelante cuando vuelva a tener tiempo libre espero seguir haciendo cositas con este lenguaje.

La presentación estuvo muy interesante como todas las cosas que hace el ingeniero Manrique.  Los que no fueron se la perdieron y no se volverá a repetir ... hasta la próxima vez.

La presentación finalizó parafraseando su objetivo inicial como una "introducción al prototipado utiliizando hardware y software opensource para que los ingenieros electrónicos olviden el miedo a programar y que los ingenieros de sistemas obvien su miedo al hardware".

BTW, las palabras prototipado o prototipeado parecen no existir en nuestro idioma, así que cual es la mejor traducción para prototyping, ojalá mas corta que la elaboración de prototipos ?

Tags: ,

Acceso web al correo de GoogleAppsForDomains

Móvil, Software, Web August 4th, 2008

Por estos días debo estar cumpliendo un año desde que migré el correo de la Fundación al servicio de GoogleAppsForDomains.  Desde entonces ha sido una gran mejora frente al proveedor de servicio con que contaban antes de mi llegada: servicio siempre disponible, buen tamaño, buen cliente web y buen interconexión (POP3 y ahora IMAP).

Como puntos en contra sólo he encontrado algunas molestias que me produce el no poder enviar directamente archivos con la extensión ZIP desde la interfaz web y algunos problemas que se presentan cuando se envía correo uno mismo, sin embargo, a pesar de estas nimiedades el servicio es altamente recomendable.

Para acceder al correo desde un teléfono móvil no es posible utilizar aún la aplicación la aplicación de GMail.  Por lo pronto es posible accederlo a través de web con las restricciones de funcionalidad que esto conlleva.

El URL para acceder al servicio de correo a través de web es el siguiente.

http://mail.google.com/hosted/DOMINIO

Reemplace DOMINIO por el dominio registrado.  Por ejemplo midominio.com, sin las www por supuesto.

Tags: ,

Práctica: distribución de midlets mediante OTA con J2ME - parte I

Desarrollo de software, Educación, Móvil August 2nd, 2008

Durante la sesión Compilación y distribución de midlets se expusieron los métodos de distribución de aplicaciones móviles, en especial los remotos a través de la red (Over-the-air provisioning).

Ahora, contando ya con el primer midlet empaquetado y listo para su distribución (cualquiera de los tres métodos utilizados) nos disponemos durante la presente sesión a implementar de manera práctica este procedimiento.

Para esto se va a utilizar Apache como el servidor HTTP y al emulador de aplicaciones móviles incluído en el JWTK como cliente de las mismas.

A pesar de que el objetivo de la práctica es el de realizar una simulación del proceso de distribución de midlets a nivel local, el procedimiento real en Internet no difiere en mas que en la ubicación en que se localicen los archivos y se especifique a su vez en el atributo MIDlet-Jar-URL del archivo descriptor de la aplicación.

 
  • Introducción.
  • Distribución de midlets.
    • OTA.
    • Flujo de eventos.
  • Herramientas.
  • Servidor de páginas: XAMPP.
    • Instalación.
    • Configuración.
  • Creación del sitio web.
  • Despliegue del midlet.
  • Instalación de la aplicación.
  • Distribución a través de Internet.
  • Enlaces de interés.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Tags: , ,

Generación del midlet HolaMundo utilizando EclipseME

Desarrollo de software, Educación, Móvil August 1st, 2008

La creación de software no es una tarea fácil, por este motivo es necesario utilizar de la manera mas eficiente posible las herramientas que se tengan a la mano y que permitan un desarrollo mas estructurado, confiable y rápido de los productos de software.

Los ambientes integrados de desarrollo (IDE) son un tipo de estas herramientas, facilitan la manipulación de  los proyectos con un nivel de abstracción tal que evitan al desarrollador tener que atender aspectos repetitivos o de bajo nivel.

Uno de los IDE mas conocidos para el desarrollo de aplicaciones Java es Eclipse, el cual es extendible mediante plugins, permitiéndole aumentar su funcionalidad e incluír el soporte a mas lenguajes de programación, incluyendo a J2ME.

En la presente sesión se llevará a cabo la instalación de Eclipse, su plugin EclipseME y con ellos se realizará la generación del midlet HolaMundo de manera análoga a las sesiones anteriores, pero esta vez utilizando esta herramienta de nivel profesional.

 
  • Introducción.
  • Herramientas.
    • J2SDK y JWTK.
    • Eclipse.
    • Plugin EclipseME.
  • Instalación de Eclipse.
  • Instalación del plugin EclipseME.
  • Configuración del plugin EclipseME.
  • Creación de un proyecto J2ME.
  • Ejecución (emulación) del midlet.
  • Generación del archivo JAR.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Tags: , ,

Generación del midlet HolaMundo utilizando las herramientas de línea de comando

Desarrollo de software, Móvil July 25th, 2008

KToolBar es una herramienta muy útil provista por el JWTK ya que permite abstraer al desarrollador de varias de las actividades necesarias para la generación de los midlets.

Como ejercicio académico es interesante poder realizar estas actividades una a una y desde la línea de comandos para poder observar con precisión su papel e importancia dentro del proceso de desarrollo de las aplicaciones móviles.

A continuación se realizarán las actividades necesarias para compilar preverificar, empaquetar y ejecutar al midlet HolaMundo de manera similar a lo realizado durante la sesión anterior, sin embargo ahora utilizando únicamente los comandos básicos provistos por la plataforma Java.

Para la elaboración de este documento se utilizará Windows Vista, motivo por el cual ciertas ubicaciones o comandos relacionados con el shell podrán variar de acuerdo con el sistema operativo utilizado.

 
  • Introducción.
  • Herramientas de software.
  • Estructura de los directorios.
  • Variables de ambiente.
  • Compilación.
  • Preverificación.
  • Empaquetamiento.
    • Creación del archivo de manifiesto.
    • Creación del archivo JAR.
    • Creación del archivo JAD.
  • Ejecución (emulación).
  • Enlaces de interés.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Tags: , ,

Generación del midlet HolaMundo utilizando el JWTK

Desarrollo de software, Educación, Móvil July 21st, 2008

Durante el presente capítulo práctico se realizará la construcción (build), ejecución (emulación) y despliegue del midlet HolaMundo cuyo código fuente fue implementado en capítulos anteriores.

Para esto se utilizarán las herramientas básicas que provee la plataforma Java como lo son el J2SDK y el JWTK.

Esta práctica permitirá también verificar los conceptos teóricos expuestos en los capítulos anteriores.

 
 
  • Introducción.
  • Herramientas necesarias.
    • Editor de texto.
    • Ambiente de desarrollo (J2SDK).
    • Java Wireless Toolkit (JWTK).
  • Instalación de las herramientas.
  • Creación del proyecto.
  • Configuración del proyecto.
  • Estructura de los directorios generados.
  • Edicion del código fuente del midlet.
  • Compilación.
  • Ejecución (emulación).
  • Despliegue del midlet.
  • Archivos generados.
    • Archivo JAD.
    • Archivo JAR.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Tags: , ,

Compilación y distribución de midlets con J2ME

Desarrollo de software, Móvil July 17th, 2008

 
  • Introducción.
  • Descripción del proceso.
    • Entorno de desarrollo.
      • Edición.
      • Compilación.
      • Preverificación (4 fases).
      • Empaquetado.
        • Archivos JAR/JAD.
    • Dispositivo móvil.
      • Verificación.
      • Ejecución.
  • Distribución.
    • Local.
    • Remota.
  • Funciones del AMS.
    • Instalación.
    • Actualización.
    • Ejecución.
    • Eliminación.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Tags: , ,