11.07.08
Trabajando con la API de Google Maps para Flex
Hola a todos. Hace ya unas cuantas semanas, google lanzo su api para poder realizar aplicaciones flex que integren Google Maps. Como no he andado muy sobrado de tiempo, todavía no la había podido probar, pero recientemente me he animado y he estado probando alguna de sus funcionalidades. La verdad es que la documentación que proporciona Google está bastante bien, proporcionándo una buena variedad de ejemplos para poder ver el código, creación de mapas paso a paso, etc. Así que animo a todo el mundo a que la utilice ya que su utilidad es grandísima.
El único problema que he tenido haciendo pruebas, es que me tope con un bug reconocido por Google. Este bug consiste en que cuando quieres codificar una dirección a un objeto de LatLng (latitud/longitud) para mostrarlo en el mapa, si codificas una misma dirección 2 veces, a la segunda vez te salta un error en la ejecución. Este error, por suerte, se puede corregir si cada vez que hacemos una codificación con la instrucción Geocoder.geocode() colocamos inmediatamente antes la isntrucción Geocoder.resetCache(). Esto hace que antes de hacer una búsqueda limpiemos la caché de búsquedas, y así evitar el error antes comentado.
Por si alguien quiere ver un ejemplo de todo esto, me he picado este ejemplo de uso. Si alguien se quiere descargar el código fuente, le puede dar con el botón derecho al programa y darle a download source, o descargarse directamente el proyecto para Flex Builder 3.
Saludos!!
(Nota: Hay veces que el ejemplo no carga bien el segundo mapa. Si esto pasa hay que recargar la página en el navegador una o dos veces. La verdad es que no sé porque ocurre esto, sólo pasa con el segundo mapa :S )
angel said,
29.07.08 at 18:04
Muy bueno Antonio :), tenia pendiente buscar el porqué pasaba esto en una de las funcionalidades de wedtool.com para posicionar lugares , pero te has adelantado :), me ha venido fenomenal.
saludos figura.
Javier said,
29.10.08 at 0:37
Hola Antonio, he bajado tu proyecto, lo he importado en mi flexbuilder, pero a la hora de ejecutarlo me aparece un mensaje en el explorador de que no puede conectar:
No se puede conectar
Firefox no puede establecer una conexión con el servidor en localhost.
He probado a cambiar la key de APIkey.as por la mia pero aun asi tampoco, ¿tengo que cambiar algo más? ¿porqué no me funciona?.
Gracias y felicidades por el site.
Javier said,
29.10.08 at 1:17
Bueno, mirando las propiedades del proyectohe encontrado que en Flex Server en el apartado Root Folder aparece “C:\Programas\xampp\htdocs” y en Root URL “http://localhost/”, he visto que yo en todos los proyectos con los q trabajo asi como ejemplos estas casillas las tengo desactivadas, pero al importar tu proyecto no puedo desactivarlo…
Mi pregunta es: como cambio eso para q no me lo coja por defecto? Esta claro q el error viene por ahi….
Gracias y ayuda!! Un saludo.
Javier said,
29.10.08 at 1:25
Y otra cosa, (siento ser tan pesado),¿porqué cuando hago pruebas con googlemaps en flex, al ejecutar el proyecto, me sale sobre el mapa “DEBUG MODE” escrito por todas partes? ¿Como elimino eso?
Gracias de nuevo.
admin said,
29.10.08 at 12:48
Hola Javier, te comento. Una cosa que se me ha olvidado poner en el post, es que el proyecto está creado para que corra sobre un servidor PHP. Esto lo hice simplemente para hacer que la aplicación corriera sobre un Apache (en mi caso utilizo XAMPP), porque la API KEY que te proporciona Google, son válidas para dominios. Es decir, no te puedes crear un proyecto flex que no utilice servidor, porque al ejecutarlo en el navegador no aparece http://localhost…. sino que te pone file:///C:/….., y de esta forma los mapas no cargan. Lo hice utilizando un servidor PHP para poder mostrar el ejemplo en mi dominio (www.antonioserrano.es), pero se puede hacer perfectamente sobre un tomcat u otro tipo de servidor.
Lo que puedes hacer es crearte un proyecto nuevo, utilizando la tecnología de servidor que quieras, crearte un API KEY para la URL que vayas a utilizar en local para desarrollar la aplicación, y luego copiarte los sources del proyecto que te descargas desde mi web cambiando lo que sea necesario.
En cuanto a lo de los mapas con lo de debug mode no tengo ni idea de por qué pasa. Eso suele salir cuando el mapa carga mal, pero no se como hacer para que no salga. Si el mapa carga correctamente, esos cuadraditos que dices no salen.
Un saludo.
Javier said,
29.10.08 at 13:52
Solucionado, DEBUG MODE, aparece cuando trabajas con la Api de googlemaps sin nigun servidor corriendo en el pc.
Gracias y te animo a que publiques más ejemplos y proyectos sobre Flex con GoogleMaps, añadiendo más funcionalidades y capas; videos, fotos, ventanas emergentes, musicas….
Un saludo.
Javier said,
03.11.08 at 22:08
Hola Antonio, sin muchos rodeos suelto la pregunta:
¿Cómo puedo cambiar los controles que vienen por defecto en GoogleMaps por unos personalizados propios? ¿Como cambio las marcas tipicas de mapa por iconos propios? Basicamente necesito hacer una aplicación como la de http://envivo.andalucia.org/, he mirado y probado la Api de googlemaps, pero no es suficiente….
Qué otros recursos me aconsejas? Por donde empiezo?. Gracias, un saludo.
Javier said,
04.11.08 at 14:01
Hola de nuevo, traigo otra duda que quizas sepas responder….
¿Hay forma de crear un mapa con el editor de mymaps, sin hacerlo mediante código, con puntos de interés, fotos, videos etc e importarlo o recuperarlo mediante flex y trabajar sobre ese mapa ya editado? o todo hay q hacerlo desde código, y no vale para nada en este caso usar el mymaps?
Saludos y gracias.
Javier said,
04.11.08 at 19:00
He estado probando tu ejemplo y en el segundo panel lo de añadir marcadores y formas poligonales da siempre un error. El mismo del que hablas en el blog.
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at com.google.maps.services::ClientGeocoder/resetCache()
at com.google.maps.wrappers::IClientGeocoderWrapper/resetCache()
at es.antonioserrano.samples.googlemaps::MapUsage/addMarker()
at es.antonioserrano.samples.googlemaps::MapUsage/___MapUsage_Button2_click()
Edu Díaz said,
18.11.08 at 10:13
Hola Antonio,
entonces si no he entendido mal, NO se puede utilizar la api para una aplicación que se vaya a ejecutar en local. En mi caso, una aplicación en .NET que te muestra en el mapa unos puntos de control.