März 2010
Flash und Geodaten
Fortsetzung, Teil 2
Ich hier – du da
Der Quellcode steht auch als Download bereit.
Anschließend kann man bequem dem MapEvent.MAP_READY lauschen, der nach erfolgreicher Initialisierung die Kartenvoransicht auf die Breiten- und Längengrade der Region einstellt, die man per default sehen möchten (in meinem Fall Düsseldorf).
Neben netten kleinen Annehmlichkeiten wie dem Draggen der Karte per Mouse, Zoomen in die Karte per Mousewheel oder einfaches Switchen der Geländetypen via Drop-Down darf bei so einer Karte natürlich nicht fehlen, eine Suchfunktion ebenso wenig. Ein Suchfeld hatte ich in meinem kleinen "designpreisverdächtigen" GUI bereits angelegt. Nun ist es Zeit, das Ganze mit Leben zu füllen.
Die Funktion initSearch übergibt in unserem Fall den gesuchten Ort an den geocoder. Dieser verwertet den eingegebenen String und liefert im Anschluss daran bestenfalls als Ergebnis die neu gefundene Kartenposition und platziert auf Wunsch eine kleinen Marker (new Marker()), den man darüber hinaus noch individuell gestalten kann (Listing 2).
///////////////////////////////////// start searching...///////////////////////////////////private function initSearch( event:MouseEvent ):void {if ( this.searchNode.text == "" || this.searchNode.text == " " ) {//kein suchbegriff wurde definiert...} else {geocoder.geocode(String(this.searchNode.text));geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, onGeocodingSuccess );}}private function onGeocodingSuccess( event:GeocodingEvent ):void {this.geoDataPool = event.response.placemarks;if ( this.geoDataPool.length > 0 ) {this.map.setCenter( this.geoDataPool[0].point, zoomFactor );this.marker = new Marker( this.geoDataPool[0].point, new MarkerOptions( { icon: this.markerCanvas, hasShadow:true } ) );this.map.addOverlay( this.marker );this.marker.addEventListener( MapMouseEvent.ROLL_OVER, onMarkerRollOver );this.marker.addEventListener( MapMouseEvent.ROLL_OUT, onMarkerRollOut );}}private function onMarkerRollOver( event:MapMouseEvent ):void {//var pnt_:Point = this.map.fromLatLngToPoint( new LatLng( 52.32, 13.25 ) );//FlashConnect.trace( String(pnt_.x) );var pnt:Point = this.map.fromLatLngToViewport( this.geoDataPool[0].point );this.infoNode["adressTxt"].text = this.geoDataPool[0].address.split(",").join("\n");this.infoNode.x = pnt.x + 15;this.infoNode.y = pnt.y - 70;this.infoNode.visible = true;Tweener.addTween( this.infoNode, { alpha:1, time:.4, transition:"easeOutSine" } );}private function onMarkerRollOut( event:MapMouseEvent ):void {Tweener.addTween( this.infoNode, { alpha:0, time:.4, transition:"easeOutSine", onComplete:hideInfo } );}private function hideInfo():void {this.infoNode.visible = false;}
Der Quellcode steht auch als Download bereit.
































