. .
CREATE OR DIE Special Downloads Shop webinale

Schauplatz

Artikel
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

März 2010

Flash und Geodaten


Fortsetzung, Teil 2

Ich hier – du da

(Link zum Artikel: http://www.createordie.de/cod/artikel/2931)

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).

  1. ///////////////////////////////////
  2. // start searching...
  3. ///////////////////////////////////
  4. private function initSearch( event:MouseEvent ):void {
  5. if ( this.searchNode.text == "" || this.searchNode.text == " " ) {
  6. //kein suchbegriff wurde definiert...
  7. } else {
  8. geocoder.geocode(String(this.searchNode.text));
  9. geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, onGeocodingSuccess );
  10. }
  11. }
  12. private function onGeocodingSuccess( event:GeocodingEvent ):void {
  13. this.geoDataPool = event.response.placemarks;
  14. if ( this.geoDataPool.length > 0 ) {
  15. this.map.setCenter( this.geoDataPool[0].point, zoomFactor );
  16. this.marker = new Marker( this.geoDataPool[0].point, new MarkerOptions( { icon: this.markerCanvas, hasShadow:true } ) );
  17. this.map.addOverlay( this.marker );
  18. this.marker.addEventListener( MapMouseEvent.ROLL_OVER, onMarkerRollOver );
  19. this.marker.addEventListener( MapMouseEvent.ROLL_OUT, onMarkerRollOut );
  20. }
  21. }
  22. private function onMarkerRollOver( event:MapMouseEvent ):void {
  23. //var pnt_:Point = this.map.fromLatLngToPoint( new LatLng( 52.32, 13.25 ) );
  24. //FlashConnect.trace( String(pnt_.x) );
  25. var pnt:Point = this.map.fromLatLngToViewport( this.geoDataPool[0].point );
  26. this.infoNode["adressTxt"].text = this.geoDataPool[0].address.split(",").join("\n");
  27. this.infoNode.x = pnt.x + 15;
  28. this.infoNode.y = pnt.y - 70;
  29. this.infoNode.visible = true;
  30. Tweener.addTween( this.infoNode, { alpha:1, time:.4, transition:"easeOutSine" } );
  31. }
  32. private function onMarkerRollOut( event:MapMouseEvent ):void {
  33. Tweener.addTween( this.infoNode, { alpha:0, time:.4, transition:"easeOutSine", onComplete:hideInfo } );
  34. }
  35. private function hideInfo():void {
  36. this.infoNode.visible = false;
  37. }

Der Quellcode steht auch als Download bereit.

 

Kommentare
Bisher keine Kommentare
Neuer Kommentar
  • Gute Kommentare werden belohnt.
  •   (optional)
  •   (Kommentar abonnieren/Gravatar - wird nicht veröffentlicht)
  •    Benachrichtige mich bei nachfolgenden Kommentaren per E-Mail
  • -+
Tags
Werbung
geodaten