Wie berichtet, erschien diese Woche die Google Maps AS3 API für Flex. Grund genug, einen näheren Blick auf die wichtigsten Funktionen dieser API zu werfen.
In diesem Beitrag werden folgende Themen gezeigt:
- Karte erstellen und anzeigen lassen
- Marker hinzufügen
- Google-typische Button- und Bedienelemente hinzufügen
- Übersichtskarte hinzufügen
- Eigene Grafik als Marker verwenden
- Geocoding
Hinweis: Trotz des Namens Google Maps API for Flash funktioniert die API zurzeit nur mit Flex und nicht mit Flash CS3 oder AIR. Deshalb benötigen die folgenden Beispiel das Flex SDK oder den Flex Builder. Die Beispielcodes werden beim Flex SDK mit mxmlc example1.mxml -library-path+=lib kompiliert.
Google Maps for Flash: Karte erstellen und anzeigen lassen

Das erste Beispiel zeigt, wie man eine Google Maps Karte in Flex integriert. Im MXML-Code wird dazu eine UI-Komponente erstellt, in der die Karte über den Funktionsaufruf startMap per ActionScript hineingeladen wird.
Ist die Karte fertig initialisiert, wird das Event MapEvent.MAP_READY ausgelöst. Nun kann man mit map.setCenter die Koordinaten, den Zoomlevel und die Darstellungsmethode der Karte wählen.
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(33.7243396617476, -34.453125), 2, MapType.SATELLITE_MAP_TYPE);
-
}
-
-
-
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
Wichtig ist bei allen Beispielen, dass man bei der Einbettung in HTML den Google API Key übergibt, sonst erscheint eine Fehlermeldung. Im unten gezeigten HTML-Beispielcode, den man für alle Demos verwenden kann, muss man diesen an zwei Stellen eintragen. Man könnte den Key jedoch auch im ActionScript-Code mit maps.key="ABCDEFG" hinzufügen.
-
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
-
"http://www.w3.org/TR/html4/strict.dtd">
-
-
<html lang="en">
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-
<title>Google Maps Demo</title>
-
<!-- Date: 2008-05-16 -->
-
</head>
-
<div id="map_canvas" name="map_canvas">
-
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
-
width="800px"
-
height="400px">
-
<param name="movie" value="example0.swf">
-
<param name="quality" value="high">
-
<param name="flashVars" value="key=ABCDEFG">
-
<embed
-
width="800px"
-
height="400px"
-
src="example0.swf"
-
quality="high"
-
flashVars="key=ABCDEFG"
-
pluginspage="http://www.macromedia.com/go/getflashplayer"
-
type="application/x-shockwave-flash">
-
</embed>
-
</object>
-
</div>
-
-
</body>
-
</html>
Link: Beispiel anschauen
Google Maps for Flash: Marker hinzufügen

Wie von der JavaScript-API bekannt, können einer Karte die typischen Google Maps Marker hinzugefügt werden. Die Klasse Marker enthält alle nötigen Eigenschaften und Methoden dafür. Im Konstruktor legt man die Zielkoordinaten fest. Des Weiteren wird über MarkerOptions das Aussehen (Farbe, Größe, Schatten, etc.) des Markers beeinflusst.
Zuletzt muss man den Marker mit der Methode overlay auf der Karte platzieren.
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
import com.google.maps.styles.*;
-
import com.google.maps.overlays.*;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(33.7243396617476, -34.453125), 2, MapType.SATELLITE_MAP_TYPE);
-
-
-
setMarker();
-
-
}
-
-
-
/*
-
** setMarker
-
**
-
*/
-
private function setMarker():void {
-
-
var meinMarker1:Marker = new Marker(
-
new LatLng(48.8, 2.3),
-
new MarkerOptions({
-
strokeStyle: new StrokeStyle({color: 0x005571}),
-
fillStyle: new FillStyle({color: 0xe8f9ff, alpha: 0.8}),
-
radius: 12,
-
hasShadow: true
-
}));
-
map.addOverlay(meinMarker1);
-
}
-
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
Link: Beispiel "Marker" anschauen
Google Maps for Flash: Google-typische Button- und Bedienelemente hinzufügen

Jeder kennt die Google-typischen Elemente wie den Zoomslider, das Steuerkreuz oder die Buttons zum Wechseln der Kartenansicht (Karte, Satellit, Hybrid, Gelände). Selbstverständlich sind auch diese in der Google Maps for Flash API enthalten. Die Klasse heißt com.google.maps.controls.
Die drei Bedienelemente heißen ZoomControl, PositionControl und MapTypeControl und können über map.addControl() in die Anwendung geladen werden.
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
import com.google.maps.styles.*;
-
import com.google.maps.overlays.*;
-
import com.google.maps.controls.*;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(35.7243396617476, -34.453125), 2, MapType.SATELLITE_MAP_TYPE);
-
-
// Slider für Zoomlevel hinzufügen
-
map.addControl(new ZoomControl());
-
-
// "Cursortasten" links oben für Position hinzufügen
-
map.addControl(new PositionControl());
-
-
// Buttons für MapType-Auswahl hinzufügen
-
map.addControl(new MapTypeControl());
-
-
-
-
-
}
-
-
-
-
-
-
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
Link: Beispiel "Bedienelemente" anschauen
Google Maps for Flash: Übersichtskarte hinzufügen

Interessant ist die Möglichkeit, über die Klasse OverviewMapControlOptions eine kleine Übersichtskarte hinzuzufügen. Bei der Erstellung legt man zuerst die Größe der Übersichtskarte fest.
Dann kann man den Stil der Box festlegen, die die Übersichtskarte enthält. Außerdem kann das "Rechteck", das zum Navigieren in der Übersichtskarte dient, ebenfalls gestaltet werden. Hinzugefügt wird die Übersichtskarte wieder über die Funktion addControl().
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
import com.google.maps.styles.*;
-
import com.google.maps.overlays.*;
-
import com.google.maps.controls.*;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(35.7243396617476, -34.453125), 2, MapType.SATELLITE_MAP_TYPE);
-
-
// Slider für Zoomlevel hinzufügen
-
map.addControl(new ZoomControl());
-
-
// "Cursortasten" links oben für Position hinzufügen
-
map.addControl(new PositionControl());
-
-
// Buttons für MapType-Auswahl hinzufügen
-
map.addControl(new MapTypeControl());
-
-
// Neue Übersichtskarte
-
placeOverview();
-
-
-
-
-
}
-
-
-
-
-
-
/*
-
** neue Übersichtskarte
-
**
-
*/
-
private function placeOverview():void {
-
-
var sizeOverview:Point = new Point(200, 200);
-
-
// Stil der "Box" für die Übersicht festlegen
-
var myControlStyle:BevelStyle = new BevelStyle(
-
{bevelAlpha: .9,
-
bevelStyle: BevelStyle.BEVEL_RAISED,
-
bevelThickness: 2} );
-
-
// Stil des Rechtecks zum Navigieren festlegen
-
var myRectangle:RectangleStyle = new RectangleStyle(
-
{fillStyle: new FillStyle({alpha: 0.5, color: 0xc6d381}),
-
strokeStyle: new StrokeStyle({alpha: 0.5, thickness: 1})});
-
-
// neue Overview erstellen
-
var overviewMapControlOptions:OverviewMapControlOptions = new OverviewMapControlOptions(
-
{padding: new Point(5, 5),
-
size: sizeOverview,
-
controlStyle: myControlStyle,
-
navigatorStyle: myRectangle
-
});
-
-
// der Bühne hinzufügen
-
map.addControl(new OverviewMapControl(overviewMapControlOptions));
-
}
-
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
Link: Beispiel "Übersichtskarte" anschauen
Google Maps for Flash: Eigene Grafik als Marker verwenden

Möchte man nicht die Standard-Marker von Google verwenden, sondern eine eigene Grafik, gelingt dies über die Eigenschaft icon der MarkerOptions. Diese kann ein Object vom Typ DisplayObject darstellen.
Um eine Grafik (png, gif, jpg) als Marker einzusetzen, lädt man die externe Grafikdatei über die Loader-Klasse. Den geladenen Inhalt muss man nun als DisplayObject deklarieren und dem Marker übergeben.
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
import com.google.maps.styles.*;
-
import com.google.maps.overlays.*;
-
import com.google.maps.controls.*;
-
import mx.controls.Alert;
-
import flash.display.Loader;
-
import flash.net.URLRequest;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(48.8, 2.3), 10, MapType.NORMAL_MAP_TYPE);
-
-
// Slider für Zoomlevel hinzufügen
-
map.addControl(new ZoomControl());
-
-
// "Cursortasten" links oben für Position hinzufügen
-
map.addControl(new PositionControl());
-
-
// Buttons für MapType-Auswahl hinzufügen
-
map.addControl(new MapTypeControl());
-
-
// meine Marker(s) laden und platzieren
-
loadMyMarkers();
-
-
-
-
}
-
-
-
/*
-
** loadMyMarkers
-
**
-
*/
-
private function loadMyMarkers():void {
-
-
// Request
-
var request:URLRequest = new URLRequest("marker.png");
-
-
// neuer Loader
-
var loader:Loader = new Loader();
-
-
// event listener
-
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, setMarker);
-
-
// start loading
-
loader.load(request);
-
}
-
-
/*
-
** setMarker
-
**
-
*/
-
private function setMarker(evt:Event):void {
-
-
// geladene Datei als DisplayObject ablegen
-
var myIcon:DisplayObject = evt.target.content as DisplayObject;
-
-
var myMarker:Marker = new Marker(
-
new LatLng(48.8, 2.3),
-
new MarkerOptions({
-
icon: myIcon,
-
hasShadow: true
-
}));
-
-
map.addOverlay(myMarker);
-
}
-
-
-
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
Link: Beispiel "Custom Marker" anschauen
Google Maps for Flash: Geocoding

Unter Geocoding versteht man das Konvertieren von Adressen (z.B. Berlin, Germany) in geografische Koordinaten. Diese Funktionalität ist in com.google.maps.services integriert.
Zuerst erstellt man ein Objekt vom Typ ClientGeocoder. Die Methode geocode() nimmt einen String mit der Adresse als Parameter und liefert die Koordinaten mittels eines Events zurück.
In diesem Beispiel sieht man außerdem, wie man ein InfoWindow beim Klick auf einen Marker öffnen kann.
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
-
-
<!-- Panel für die Applikation -->
-
<mx:Panel title="Google Maps" width="100%" height="100%">
-
-
<!-- UIComponent für Map -->
-
<mx:UIComponent id="mapContainer"
-
initialize="startMap(event);"
-
resize="resizeMap(event)"
-
width="100%" height="100%" />
-
-
</mx:Panel>
-
-
-
<!-- ActionScript -->
-
-
<mx:Script>
-
<![CDATA[
-
import flash.events.Event;
-
import com.google.maps.*;
-
import com.google.maps.styles.*;
-
import com.google.maps.overlays.*;
-
import com.google.maps.controls.*;
-
import com.google.maps.services.*;
-
import mx.controls.Alert;
-
import flash.display.Loader;
-
import flash.net.URLRequest;
-
-
-
/*
-
** Karte
-
*/
-
private var map:Map;
-
-
/*
-
** Karte
-
*/
-
private var placemarks:Array;
-
-
/*
-
** Marker
-
*/
-
private var marker:Marker
-
-
/*
-
** Map erstellen
-
**
-
*/
-
public function startMap(event:Event):void {
-
-
// new map
-
map = new Map();
-
-
// event listener, wenn Map fertig initialisiert
-
map.addEventListener(MapEvent.MAP_READY, onMapReady);
-
-
// Map in den mapContainer einfügen
-
mapContainer.addChild(map);
-
-
// Key über ActionScript zuweisen
-
//map.key = "ABCDEFG";
-
}
-
-
-
/*
-
** Größenänderung des Cont
-
**
-
*/
-
public function resizeMap(event:Event):void {
-
-
// Karte bei Größenänderung des Containers nachziehen
-
map.setSize(new Point(mapContainer.width, mapContainer.height));
-
-
}
-
-
/*
-
** onMapReady
-
**
-
*/
-
private function onMapReady(event:MapEvent):void {
-
-
-
// Anfangsposition setzen
-
// Koordinaten
-
// Zoomlevel: 0 bis 19
-
// MapType,MapType.NORMAL_MAP_TYPE, .SATELLITE_MAP_TYPE, .PHYSICAL_MAP_TYPE, HYBRID_MAP_TYPE
-
map.setCenter(new LatLng(35.7243396617476, -34.453125), 2, MapType.NORMAL_MAP_TYPE);
-
-
// Slider für Zoomlevel hinzufügen
-
map.addControl(new ZoomControl());
-
-
// "Cursortasten" links oben für Position hinzufügen
-
map.addControl(new PositionControl());
-
-
// Buttons für MapType-Auswahl hinzufügen
-
map.addControl(new MapTypeControl());
-
-
// Geocoding
-
doGeocode()
-
-
}
-
-
-
/*
-
** Geocding
-
**
-
*/
-
private function doGeocode():void {
-
-
// neues Geocodingobjekt
-
var geocoder:ClientGeocoder = new ClientGeocoder();
-
-
// Eventlistener für Geocoding erfolgreich
-
geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, onGeocodingSuccess);
-
-
// Eventlistener für Geocoding nicht erfolgreich
-
geocoder.addEventListener(GeocodingEvent.GEOCODING_FAILURE, onGeocodingFailure);
-
-
// Beispielaufruf mit "Berlin Germany"
-
geocoder.geocode("Berlin Germany");
-
}
-
-
-
/*
-
** Geocoding Success
-
**
-
*/
-
private function onGeocodingSuccess(event:GeocodingEvent):void {
-
-
// Hinweis ausgeben
-
Alert.show("Geocoding erfolgreich");
-
-
// Placemark (Orte) in einem Array ablegen
-
placemarks = event.response.placemarks;
-
-
if (placemarks.length> 0) {
-
-
// Karte auf neue Position bewegen (Eigenschaft point enthält Zielkoordinaten)
-
map.setCenter(placemarks[0].point, 10);
-
-
// neue Marker für die Zielposition
-
marker = new Marker(placemarks[0].point);
-
-
// Marker auf die Karten setzen
-
map.addOverlay(marker);
-
-
// event listener für Anklicken des Markers
-
marker.addEventListener( MapMouseEvent.CLICK, onMarkerClick);
-
-
}
-
-
}
-
-
/*
-
** Geocoding Failed
-
**
-
*/
-
private function onGeocodingFailure(event:GeocodingEvent):void {
-
Alert.show("Geocoding nicht erfolgreich");
-
}
-
-
/*
-
** onMarkerClick
-
**
-
*/
-
private function onMarkerClick(event:MapMouseEvent):void {
-
marker.openInfoWindow(new InfoWindowOptions({content: placemarks[0].address}));
-
}
-
-
]]>
-
</mx:Script>
-
-
</mx:Application>
9 Kommentare zum Beitrag "Tutorial: Einführung in Google Maps for Flash/Flex"
Hier etwas zum Thema “Google Maps for Flash” in Flash CS3:
“USING GOOGLE MAPS WITHIN CS3″
http://labs.qi-ideas.com/2008/06/19/using-google-maps-within-cs3/
Hier ein weiterer Link, wie man wohl die Google Maps Komponente in Flash verwenden kann:
http://www.ideaography.net/using-google-maps-in-flash-without-flex/
Die Maps-API liegt übrigens mittlerweile in Version 1.6 vor.
Hier ein paar Infos über neue Features:
http://www.ideaography.net/google-maps-flash-api-update/
Google Maps for Flash funktioniert jetzt auch mit Adobe AIR.
http://shigeru-nakagaki.com/index.cfm/2008/11/21/20081121-Google-Maps-for-Flash-on-AIR-NOW
Ich schlage mich gerade damit herum meinen Markern beizubringen das nach
einem Klickereignis sich die Zoomstufe ändern soll und der Mittelpunkt der
Karte auf den geklickten Marker ausgerichtet wird.
Mit folgendem Code funktioniert es leider nicht:
private var markerObjects:Array=[];
public function readXml(event:Event):void {
var markersXML:XML=new XML(event.target.data);
var markers:XMLList=markersXML..marker;
var markersCount:int=markers.length();
var i:Number
for(i=0; i < markersCount; i++)
{
var marker:XML=markers[i];
var name:String=marker.@name;
var latlng:LatLng=new LatLng(marker.@lat,
marker.@lng);
var mapMarker:Marker=createMarker(latlng,
name);
googleMap.addOverlay(mapMarker);
}
}
public function createMarker latlng:LatLng, name:String):Marker
{
var marker:Marker=new Marker(latlng);
var html:String=”<b>” + name + “</b>”
marker.addEventListener(MapMouseEvent.CLICK,
function
(e:MapMouseEvent):void {
googleMap.setZoom(10);
});
googleMap.setCenter({mapMarker:latlng,
opt_zoom:7});
return marker;
}
Die Newsgroup bei Google habe ich bereits befragt, leider sind die
Antworten recht spärlich und habe noch nicht weitergeholfen.
Die Fehlermeldung die ich in dem Klickereignis bekomme ist folgende:
Error: Implicit coercion of a value with static type Object to a
possibly unrelated type com.google.maps:LatLng.
Ich würde mich freune wen Sie mir ein Stück weiterhelfen könnten.
Evtl. hilft dir diese Klasse weiter:
package com.icw {
import flash.geom.Point;
import mx.controls.Image;
import mx.controls.Text;
import mx.controls.TextArea;
import org.flashdevelop.utils.FlashConnect
import flash.events.Event;
import flash.filters.DisplacementMapFilter;
import mx.events.TreeEvent;
import com.google.maps.*;
import com.google.maps.styles.*;
import com.google.maps.overlays.*;
import com.google.maps.controls.*;
import com.google.maps.services.*;
import mx.controls.Alert;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.DisplayObject;
public class CustomMarker {
/*
* map where to place the marker
*/
private var map:Map;
/*
* coordinates
*/
private var coord:LatLng;
/*
* coordinates
*/
private var zoomLevel:Number;
/*
* text field (where to place the text)
*/
private var textField:Text;
/*
* image of the location
*/
private var imgLocationObject:Image;
/*
* description text for the location
*/
private var description:String;
/*
* description text for the location
*/
private var imageOfLocationURL:String;
public function CustomMarker(m:Map, coordinates:LatLng, zoom:Number, imageURL:String):void {
map = m;
coord = coordinates;
zoomLevel = zoom;
// Request
var request:URLRequest = new URLRequest(imageURL);
// neuer Loader
var loader:Loader = new Loader();
// event listener
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, setMarker);
// start loading
loader.load(request);
}
/*
** setMarker
**
*/
private function setMarker(evt:Event):void {
// geladene Datei als DisplayObject ablegen
var myIcon:DisplayObject = evt.target.content as DisplayObject;
var myMarker:Marker = new Marker(
coord,
new MarkerOptions({
icon: myIcon,
iconAlignment: MarkerOptions.ALIGN_BOTTOM,
iconOffset: new Point(-10, 0),
hasShadow: true
}));
map.addOverlay(myMarker);
myMarker.addEventListener(MapMouseEvent.CLICK, onMarkerClick);
}
/*
** onMarkerClick
**
*/
private function onMarkerClick(evt:MapMouseEvent):void {
map.setCenter(coord, zoomLevel);
textField.htmlText = description;
imgLocationObject.visible = true;
imgLocationObject.source = imageOfLocationURL;
}
/*
** initInfoBox
**
*/
public function initInfoBox(tf:Text, ig:Image, des:String, imgUrl:String):void {
textField = tf;
description = des;
// save to the destination movieclip
imgLocationObject = ig;
// save the URL
imageOfLocationURL = imgUrl;
}
}
}
Kann dann so erstellt werden:
var myMarker:CustomMarker = new CustomMarker(map,
new LatLng(…, …), zoomLevel , marker);
Habe ein Problem und zwar möchte ich die Karte in einer Größe von 100×100 Pixeln anzeigen, wie definiere ich die Größe des Fensters/ Containers? Desweiteren stimmt die Position der Karte innerhalb der Bühe nicht. Was kann ich da tun?
Danke
Einfach die Größenangaben anpassen. Du kannst auch absolute Werte nehmen.
width="100%" height="100%"
[...] Informationen und Näheres zur Maps-API gibt’s im Tutorial Einführung in Google Maps for Flash/Flex. Im Folgenden eine kurze Beschreibung, was hinter den neuen 3D-Karten [...]
Schreibe einen Kommentar