Flash Google Maps con Drupal y Kml's

El Caso: Desarrollar una nueva sección de un sitio web, que liste eventos provenientes de fuentes internas y externas y  los muestre en un mapa, con posibilidad de búsqueda. Todo esto con requisitos tecnicos precisos

Refinando requisitios...


-Sitio desarrollado sobre drupal
-Debe usarse la API de Google Maps en su version Flash , para poder "poner ciertos colorcitos"
-La búsqueda debe ser utilizar "great circle calculation" para el listado
-Para el mapa mostrar todos los eventos, centrando el mapa en el criterio de busqueda
-Si no hay criterio de búsqueda, se autodetecta la localización por IP del visitante
-Los eventos se leen de dos fuentes distintas (KML y a mano) y deben estar dentro de la estructura de datos de drupal.


Puntualizando los problemas y soluciones...



Incluir la nueva estructura de datos en drupal

    Módulo Location y creación de un content type adecuado. Así ademas queda cómodo para agregar eventos a mano.
    Además se creo un módulo propio para agrupar todas las funciones necesarias para el resto de los puntos.

Autodetección de localización del visitante por ip

    Se utilizó una base de datos de dos tablas, con rangos de ip relacionados a una tabla de ciudades, que además incluye la latitud y longitud de la ciudad.
    La version gratuita es "less acurate" pero hasta donde probamos funciono bien. http://www.maxmind.com/app/geolitecity
    Simplemente se creo una función que dada la ip devuelve un punto lat/lang, para ser utilizado tanto en el mapa como en la busqueda.

Great Circle Calculation

    La búsqueda se realiza a traves de un conjunto de funciones en el modulo propio, que devuelve un array con los nodos
(y su información) para ser utilizado en el template (tambien para generar el xml necesario para el mapa en flash). Alli se incluye el calculo y comparacion en la sentencia sql. En caso de que se por ip, se utiliza la funcion anterior para obtener la posicion lat/lang, sino, se realiza una consulta al geocoder de google para obtener la lat/lang del criterio de búsqueda.
( más info )

Importacion de Kml

    La importacion finalmente fue finalmente un simple parseo de un xml e insercion en Db. Los detalles de las consultas sql necesarias estaran en los posts técnicos. Se agrego una entrada al menu para poder importar entradas a mano, y despues pidieron un url extra que pueda llamarse desde un cron. 

Flash Google Maps

    Este fue el punto mas "tenso" a nivel desarrollo. Google Maps para flash ofrece 3 posibilidades. Simplemente 2 necesitan pagar por productos de Adobe y asi que se eligio utilizar el compilador gratuito de flex. Para obtener la informacion, el mapa llama a un XML generado por drupal (a traves el modulo propio y el theme propio). El xml tiene formato propio y el evento llamado X indica la posicion de la busqueda. Curiosidades del mapa: Zoom y centrado animado, uso de filter & colorMatrix para mejorar la presentación, distintos íconos (markers), infowindow (burbuja) con un poquito de transparencia. Más info