¿Quieres registrarte?

Usando API de Google maps para Actionscript 3

Por: leobaraldi
24 de Marzo del 2009
4,849 visitas

Hace un tiempo usé un componente de AFcomponet que nos permitía usar Google Maps. Dicho momento dejo de funcionar dado los cambios que propuso Google al publicar su API con nuevos cambios y la publicación para flash.
De esa manera ahora no necesitamos de un componente de tercero para poder tener mapas en nuestra web.
Podrán comprobar que la Api provista por Google es mucho más amigable y simple, también cuenta con una velocidad considerablemente más rápida en lo que se refiere a acceso de datos.
Cuenta también una extensa hoja de referencia lo cual nos va a hacer fácil el desarrollo de cualquier aplicación sea para Flash, AIR o Flex.

Antes que todo lo que necesitan es gestionar una llave (Key (1)) para utilizar la API, para ello deben visitar este link: http://code.google.com/intl/es-ES/apis/maps/signup.htm es importante que sean usuarios registrados de google (Gmail por ejemplo), y la clave va relacionada directamente con el dominio (2) donde ejecutaran la aplicación.



El siguiente paso es instalar el SDK o componente que nos provee Google para conectarse a google maps, la descarga la hacemos desde este link: http://maps.googleapis.com/maps/flash/release/sdk.zip



Una vez descargado des compactamos el archivo y lo pegamos en la siguiente carpeta para los que usamos Windows:
X:\Archivos de programa\Adobe\Adobe Flash CS3\es\Configuration\Components

Nota: X es la unidad de disco donde este instalado – “es” es el idioma, en este caso yo lo tengo en español, en ingles seria “en”

Para los muchachos de Mac así: Macintosh HD/Applications/Adobe Flash CS3/Configuration/Components
Si lo hicimos bien abrimos Flash y en la ventana de componentes deberíamos ver algo asi:



Ahora con un archivo nuevo en blanco procedemos a arrastrar el componente GoogleMapsLibrary a nuestro escenario.
Abrimos el panel de acciones “F9” y escribimos lo siguiente:

Código :

// importamos las clases necesarias, están son las básicas para este ejemplo alcanzan. Al final del tutorial les dejo el link de las referencias para que puedan ver cada clase en particular.
import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapType;
import com.google.maps.controls.*;
import com.google.maps.LatLng;

//seteamos el ancho y alto de nuestra película
var ANCHO:int = stage.stageWidth;
var ALTO:int = stage.stageHeight;

//creamos nuevo objeto Map
var map:Map = new Map();

//aquí pegamos el código de la llave que sacamos en el primer paso
map.key = "ABQIAAAAvvxprSVgDmort-nQvP9UOBRcIBM5SEgUYyuJIuqH4Qf0kgkYgBT_K4sLwopPkxZFAw-tlQLIRz3sTA";

//seteamos el alto y ancho del mapa
map.setSize(new Point(ANCHO, ALTO));

//agregamos un detector de evento para cuando se completo la carga
map.addEventListener(MapEvent.MAP_READY, onMapReady);

//cargamos el mapa a nuestra lista de visualización
this.addChild(map);

//este es un poniter que agregue yo, el que viene no me gusta
var pointer:Pointer = new Pointer();
this.addChild(pointer);
pointer.x = (ANCHO/2)-(pointer.width/2);
pointer.y = (ALTO/2)-(pointer.height/2);
pointer.alpha = 0.5;

//en este campo vamos a imprimir las coordenadas y zoom actuales, si comentan estas líneas pueden ocultar esta parte
var texto:TextField = new TextField();
var formatoTexto:TextFormat = new TextFormat();
this.addChild(texto);
formatoTexto.font = "Arial";
formatoTexto.size = 12;
formatoTexto.align = TextFormatAlign.LEFT;
formatoTexto.bold = true;
texto.multiline = true;
texto.background = true;
texto.autoSize = TextFieldAutoSize.LEFT;
texto.defaultTextFormat = formatoTexto;

//si se cargo todo bien ejecutamos!
function onMapReady(event:Event):void {
//centramos el mapa a las coordenadas deseadas (-31...,-64...) e indicamos el zoom (12) y tipo de mapa por defecto (MapType.NORMAL_MAP_TYPE)
map.setCenter(new LatLng(-31.409619,-64.184532), 12, MapType.NORMAL_MAP_TYPE);
//mostramos el control de zoom
map.addControl(new ZoomControl());
//el control de posicion
map.addControl(new PositionControl());
//el selector de tipo de mapa
map.addControl(new MapTypeControl());
//el evento para reimprimir las coordenadas cuando desplazamos el mapa
map.addEventListener(Event.ENTER_FRAME,coordenadas);
}

//imprimimos las coordenadas en el campito de texto
function coordenadas(e:Event):void {
texto.text = "Lat/Lng: "+e.currentTarget.getCenter()+"\rZoom: "+e.currentTarget.getZoom() ;
texto.x = (ANCHO-texto.textWidth)-10;
texto.y = (ALTO-texto.textHeight)-10;
}


Bueno hasta ahí como pueden ver muy pero muy simple! Espero que les sea útil.

Referencia de la API
Ejemplos de uso por Google
Este ejemplo funcionando
Archivos de este ejemplo

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3 google

Comentarios | Enviar un comentario
Que buen tip. Muchas gracias.
Por: adobexpert
Buenas tardes. Muchas gracias por hacer la vida mas sencilla a los demas. Por que el pointer no se mueve? Pensaba que el pointer es esa marquita que indica el lugar exacto en el mapa, y resulta que es un centro solamente... ¿se puede añadir la marquita tipica de google? Gracias de nuevo
Por: rakeljuice
En las referencias del api revisa esto!
http://code.google.com/intl/es-ES/apis/maps/documentation/flash/reference.html#Marker
Por: leobaraldi
gracias. la referencia es maravillosa cuando sabes leerla.... parece que entiendo lo que dice pero no se que tengo que copiar ni donde.... soy aprendiz muy basico basico.... me puedes dar alguna pista, por favor? No se si quiera si tengo que crear un marker, si vale con tu pointer, o si me va a salir el de google solito en el mapa....

gracias
Por: rakeljuice
al final del codigo pongo

Marker(latLng:40.35387,-3.69132);
o
Marker(latLng:(40.35387,-3.69132), options?:MarkerOptions)
o
Marker(latLng:40.35387,-3.69132, options?:MarkerOptions)

pero todo me da error al compilar. Tambien me da error cuando comento el fragmento que dices que se puede comentar para que no salgan las coordenadas.
Por: rakeljuice
Hola, alguien sabe como hacer para que el mapa apareza en una cierta posicion x e y de mi escenario? porque siempre me aparece en el vertice superior?
Por: Diego -blog
Hola! cuando arrastro el componente de google a mi escenario, no puedo insertarle código ¿sabes a que se debe? Muchas Gracias
Por: juako-blog
¿Alguién sabe como personalizar el marker como la API en javascript? Es decir, pocer el icono que tu quieras en lugar del que viene por defecto.
Por: abanico-blog
Para Diego -blog. Si quieres colocar el mapa en una posición determinada solo tienes que asegurarte de que el componente mapa tiene como nombre de instancia map y en el código poner:

map.x = 500
map.y = 500
Por: abanico-blog
Hola...a mi también me interesa el tema del pointer...¿cómo hacer para que el pointer se quede clavado en un sitio exacto y no sea sólo el centro del mapa? gracias
Por: Ramon Moreno-blog
Hola, cuando inserto el mapa, queda encima de todo. ¿como hago para que quede en la capa de mas abajo???
Por: David_K
Para agregar un pointer es algo asi:

Código :

import com.google.maps.Map;

import com.google.maps.MapEvent;

import com.google.maps.MapType;

import com.google.maps.controls.*;

import com.google.maps.LatLng;

//IMPORTAMOS LA CLASE PARA TRABAJAR CON MARCADORES

import com.google.maps.overlays.*;



var map:Map = new Map();

//CREAMOS UNA VARIABLE CON EL TIPO MARKER

var marker:Marker;



map.key="ABQIAAAAvvxprSVgDmort-nQvP9UOBRcIBM5SEgUYyuJIuqH4Qf0kgkYgBT_K4sLwopPkxZFAw-tlQLIRz3sTA";

map.addEventListener(MapEvent.MAP_READY, onMapReady);

map.setSize(new Point(stage.stageWidth, stage.stageHeight));

this.addChild(map);



function onMapReady(event:Event):void {

   //centramos el mapa a las coordenadas deseadas (-31...,-64...) e indicamos el zoom (12) y tipo de mapa por defecto (MapType.NORMAL_MAP_TYPE)

   map.setCenter(new LatLng(-31.409619,-64.184532), 12, MapType.NORMAL_MAP_TYPE);

   map.addControl(new ZoomControl());

   map.addControl(new PositionControl());

   map.addControl(new MapTypeControl());

   //CREAMOS UN NUEVO OBJETO CON LAS COORDENADAS DEL MARCADOR

   marker=new Marker(new LatLng(-31.409619,-64.184532));

   //Y LO AGREGAMOS A LA VISUALIZACION DEL MAPA

   map.addOverlay(marker);

}

Por: leobaraldi
El mio es similar pero lo que hice fue tirar un movieclip en el escenario para el marker

Código :

package  
{
   import com.google.maps.InfoWindowOptions;
   import com.google.maps.LatLng; 
   import com.google.maps.LatLngBounds;
   import com.google.maps.Map; 
   import com.google.maps.MapEvent; 
   import com.google.maps.MapMouseEvent;
   import com.google.maps.MapType; 
   import com.google.maps.controls.*; 
   import com.google.maps.LatLng; 
   import com.google.maps.overlays.*;
   import flash.display.Loader;
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.geom.Point;
   import flash.net.URLRequest;
   
   public class GoogleMapMentesFlash extends MovieClip
   {
      private var map:Map;
      private var marker:Marker;
      private var lat:Number = -34.60810266502464;
      private var lon:Number = -58.37216377258301;
      private var latMarker:Number = lat;
      private var lonMarker:Number = lon;
      ////
      
      public var marker_icon:MovieClip;
      public var dragDisabled:Boolean = false;
      private var hideControles:Boolean = false;
      private var anchoMap:Number = 500;
      private var altoMap:Number = 500;
      private var zoomInit:Number = 16;
      private var titleTool:String = "Plaza de Mayo, Buenos Aires - Argentina";
      private var contentTool:String = "www.mentesflash.com.ar/blog/";
      
      public function GoogleMapMentesFlash() 
      {
         addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
      }
      
      private function onAddedToStage(e:Event):void 
      {
         removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
         map = new Map(); 
         map.key="ABQIAAAAAFtvOzcJURr-Vk0r5EfhqBQkeRyOL7awFQhJYx5Sj4jc3OO3QxSv9WavazbanfZ1P6Hk_yhNdVoyjA"; 
         map.addEventListener(MapEvent.MAP_READY, onMapReady); 
         
          
         map.setSize(new Point(anchoMap, altoMap)); 
          
         this.addChild(map); 
      }
      private function onMapReady(event:Event):void { 
 
         map.setCenter(new LatLng(lat, lon), zoomInit, MapType.NORMAL_MAP_TYPE); 
         map.addControl(new ZoomControl()); 
         map.addControl(new PositionControl()); 
         map.addControl(new MapTypeControl()); 
       
         
         var markerOptions:MarkerOptions = new MarkerOptions();
         markerOptions.icon = marker_icon;
         if(hideControles){
            map.clearControls();
         }
         if (dragDisabled) {
            map.disableDragging();
         }

         var marker:Marker = new Marker(new LatLng(latMarker, lonMarker),markerOptions);
         marker.addEventListener(MapMouseEvent.ROLL_OVER, function(event:Event):void {
            marker.openInfoWindow(new InfoWindowOptions( { title: titleTool, content: contentTool } ));
         });
         map.addOverlay(marker);

      }
   }

}


Marco Cartolano
www.mentesflash.com.ar/blog/
Por: Marco -blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.