Come usare Google Maps in Adobe Flash CS4
sabato 29 agosto, 2009In Adobe Flash è possibile utilizzare un vasto assortimento di Web API esterne fornite da servizi come Facebook, Twitter o Flickr. In questo tutorial vedremo come integrare, in modo davvero semplice, i servizi di Google Maps in un filmato/applicazione Adobe Flash CS4. Premetto che il procedimento per poter utilizzare Google Maps in Flash è molto simile a quello che accade in HTML/Javascript (vedi per dettagli Come inserire Google Map nel proprio Web).
Download ed installazione delle SDK
Per prima cosa memorizziamo nei bookmark del nostro browser l'indirizzo del sito Google Maps API per Flash. Su questo sito troviamo tutto ciò che ci server per utilizzare le API di Google. Sulla destra della pagina è possibile accedere ad una serie di risorse, tra cui il link per scaricare le SDK da usare in Flash. Salvate lo ZIP sulla vostra scrivania (o Desktop) e scompattatelo. Nella cartella sdk/lib troverete un file chiamato map_1_16.swc. Copiate questo file nella clipboard (Command-C per Mac o Ctrl-C per PC) e posizionatelo all'interno di questo percorso:
-
// Mac
-
[cartella utente]/Library/Application Support/Adobe/Flash CS4/language/Configuration/Components
-
-
// Windows
-
[cartella utente]\Local Settings\Application Data\Adobe\Flash CS4\language\Configuration\Components
Se la cartella Components non esiste già, createla e in questa create una cartella Google e incollate il file map_1_16.swc. Se per caso avevate già aperto Flash (frettolosi...), chiudetelo e rapritelo, in modo che possa ricaricare il componente appena installato.
Creiamo il filmato Flash
A questo punto apriamo Flash e creiamo un nuovo filmato. Aprite la finestra Componenti e dovreste trovare Google Maps:

Selezionate il componente GoogleMapsLibrary e trascinatelo nello stage. Nel primo frame del nostro filmato inserite il seguente semplice codice:
-
// Importo le classi Google Maps
-
import com.google.maps.*;
-
import com.google.maps.overlays.*;
-
import com.google.maps.controls.*;
-
-
var map:Map = new Map();
-
map.key = "API_KEY"; // vedi sotto per ottenere una tua chiave
-
// In questo esempio imposto la dimensione della Mappa Google della
-
// stessa grandezza del filmato. In alternativa potete inserire le
-
// dimensioni che preferite.
-
addChild(map);
Nella riga 7 dovete sostituire la stringa API_KEY con la chiave di attivazione che fornisce Google. Per ottenerla basta tornare sul sito Google Maps API for Flash e richiedere una API Key cliccando su Sign up for a Google Maps API Key. Quando vi verrà chiesto di inserire l'url del sito sul quale volete utilizzare il filmato Flash che accede alle API di Google, nel caso non lo sapete ancora o voletete semplicemente provare il filmato in locale, inserite http://localost e cliccate su Generate API Key:

A questo punto possiamo già provare il filmato, ottenendo:

Aggiungiamo qualche controllo
Per prima cosa aggiungiamo i classici controlli di Posizione, Zoom e Tipo Mappa. Per fare questo dobbiamo essere sicuri che la mappa sia pronta all'uso. Basta quindi creare un listener sull'evento MapEvent.MAP_READY. Aggiungiamo quindi le seguenti righe di codice:
-
// Aggiungiamo i controlli
-
map.addEventListener( MapEvent.MAP_READY, onMapReady );
-
-
function onMapReady(e:MapEvent):void {
-
map.addControl( new PositionControl() );
-
map.addControl( new ZoomControl() );
-
map.addControl( new MapTypeControl() );
-
}
Impostiamo un indirizzo
A questo punto possiamo impostare la mappa in modo che visualizzi un indirizzo specifico, come la sede della mia società Saidmade a Modena - o qualsiasi altro indirizzo che preferite.
Suggerimento: per trovare le coordinate del nostro indirizzo, ovvero Latitudine e Longitudine, possiamo usare questo semplice e utile hack. Aprire il sito di Google Maps. Una volta sulla mappa cercate l'indirizzo che desiderate (ad esempio Via Cortese 10, Modena). Quando l'indirizzo è visualizzato sulla mappa, inserite questa riga nella barra indirizzi del browser:
-
javascript:void(prompt('',gApplication.getMap().getCenter()));
Si aprirà una finestra pop-up con le coordinate utilizzabile nel codice:

Torniamo ad ActionScript e aggiungiamo le seguenti righe di codice nella funzione onMapReady():
-
// centro la mappa su una specifica località
-
map.setCenter( new LatLng( 44.639828, 10.941795), 18, MapType.SATELLITE_MAP_TYPE );
Eseguiamo il filmato:

Aggiungiamo un Marker
Sempre all'interno della funzione onMapReady() aggiungiamo le seguenti righe di codice:
-
// aggiungiamo il default marker
-
var m:Marker = new Marker( new LatLng( 44.639828, 10.941795) );
-
map.addOverlay(m);

I Marker possono essere personalizzati a piacimento, sia tramite gli stili fornite dalle API stesse di Google, sia tramite Flash. Ad esempio aggiungendo questa import all'inizio del codice:
-
import com.google.maps.styles.*;
e sostituiendo il codice di creazione Marker visto prima con:
-
// aggiungiamo il default marker
-
var m:Marker = new Marker(
-
new LatLng(44.639828, 10.941795),
-
new MarkerOptions({
-
strokeStyle: new StrokeStyle({color: 0x987654}),
-
fillStyle: new FillStyle({color: 0x223344, alpha: 0.8}),
-
radius: 12,
-
hasShadow: true
-
}));
-
map.addOverlay(m);
otteniamo il seguento effetto:

In alternativa è possibile associare direttamente un MovieClip come Marker. Essendo un MovieClip, ovviamente, esso potrà contenere animazioni, video o qualsiasi altro tipo di contenuto interattivo supportato in Flash. Inoltre è possibile disegnare linee e forme così da creare delle mappe interattive e ricche di contenuti multimediali.
Per aggiungere un MovieClip e sufficiente crearlo, usando ad esempio un'immagine o un'animazione Flash, e impostare le sue proprietà in questo modo:

Fatto questo modificate il codice di creazione Marker in:
-
// aggiungiamo il default marker
-
var m:Marker = new Marker( new LatLng(44.639828, 10.941795),
-
new MarkerOptions( {icon: new myMarkerMovieClip() } ) );
-
map.addOverlay(m);

Tutte le informazioni sulle API, le classi, metodi, eventi e proprietà sono disponibili su Google Maps API ActionScript Reference.
Inoltre l'intero pacchetto è stato recentemente aggiornato con molte novità interessanti, come le Mappe 3D.










19

[...] Aggiornamento: vedi Come usare Google Maps in Adobe Flash CS4 [...]
Ottimo tutorial, anche se preferisco usarle in Flex
@Napolux: immaginavo
- visto che carino il trick (javascript) per ottenere "al volo" Lat e Lang da Google Maps ?!
wonderful!!
...mah...per personalizzare la mappa ad esempio 600*600 a x 200 e y 250 in as3 come li devo gestire!?
Sono alle prime righe con as3.
Tnks for all!!
è possibile memorizzare la key e le coordinate scrivendole su file xml esterno e quindi leggerle e poi inviarle nel punto
map.key = "API_KEY";potreste dirmi come fare ??
Grazie.
@Devis: se il file XML è presente su un server puoi sicuramente leggerlo, ma non scriverlo direttamente. Per sapere come vedi Flash CS3: comunicazione con un Web Server
Funziona solo con Flash CS4?
Ho provato con il CS3 ma mi esce la scritta:
@Massimo:
No, può essere utilizzato anche con Adobe Flash CS3. Vedi qui per dettagli
ciao, ti ringrazio per il tutorial è molto utile.
Una cosa che non capisco, quando utilizzi un marker, com'è possibile fare in modo che appaia la nuvoletta bianca di google con le varie informazioni sull'inidirizzo sopra di esso, come accade normalmente cliccando sul marker in google maps?
@nuovobuio: per farlo devi utilizzare il metodo:
map.openInfoWindow(), ad esempio:Dove è
optionsusa, ad esempio:Ciao, gentilissimo. Ti chiedo ancora una cosa che non mi è chiara sto provando ad adattare l'aliasing del testo a mio piacimento, con il classico:
ma non capisco dove metterlo.
Il testo appare sempre sgranato, non trovo il
texFielda cui applicare l'aliasing, dov'è??? Non lo vedo??@nuovobuio: il fatto che tu non trovi il
textFieldprobabilmente significa che l'hai inserito direttamente nello stage. Per impostare il tipo di AntiAlias ricordati, comunque, che devi incorporare i caratteri, altrimenti non ti funzionerà. Se il TextField è presente nello stage puoi impostare il tipo di AntiAlias selezionando il TextField (forse intendevi Label o TextInput) e modificando i parametri nella finestra/pannello proprietà.Se invece vuoi operare da codice, il TextField deve avere un'identificativo, cioè un nome univoco che permetta al codice di referenziarlo. Per impostare il nome dell'istanza (tipo "miotextfield") puoi operare sempre dallo stage: seleziona il componente e nella finestra/pannello proprietà in "nome istanza" inserisci "miotextfield". Se hai difficoltà inviami il codice.
scusami, non sono stato chiaro io, intendevo l'aliasing del testo della nuvoletta di google map, il title e il content del codice che mi hai precedentemente postato, non riesco ad impostargli l'aliasing, il testo mi appare sempre "rovinato".
Dove trovi le varie opzioni da impostare per google map? Sono tutte qui o ce ne sono altre tipo lo spessore della linea di perimetro della nuvola ecc ?
Scusami, è la prima volta che provo le mappe in flash..
ho fatto una domanda troppo scema?
@nuovobuio:
no, tranquillo... comunque devi guardare nella documentazione Google. Solo se le API di Google lo permettono puoi impostare l'aliasing. Quelli non sono oggetti Flash direttamente indirizzabili. Ergo, se Google non lo supporta non lo puoi impostare
spiacente
niente.. non va
ho seguito alla lettera il tutorial, inserita la mappa in libreria, e messa su schermo tramite addChild da libreria:
var mioOggetto:mappa = new mappa();
mcSezione3.addChild(mioOggetto);
funziona solo in locale, se lo provo in linea, mi dice:
Initialization failed: please check the API key,
swf location, version and network availability.
Ho anche inserito l'url del sito per ricevere la chiave, ma nulla, in rete non vuole funzionare, in locale invece funziona benissimo.. è in as3 con cs4.. mi aiuti a risolvere?