1 package net.systemeD.potlatch2 {
3 import flash.display.*;
4 import net.systemeD.halcyon.Map;
5 import net.systemeD.halcyon.MapEvent;
6 import com.yahoo.maps.api.YahooMap;
7 import com.yahoo.maps.api.YahooMapEvent;
8 import com.yahoo.maps.api.core.location.LatLon;
10 public class Yahoo extends YahooMap {
13 private static const token:String="f0a.sejV34HnhgIbNSmVHmndXFpijgGeun0fSIMG9428hW_ifF3pYKwbV6r9iaXojl1lU_dakekR";
14 private static const MAXZOOM:int=17;
16 private var _lat:Number;
17 private var _lon:Number;
18 private var _scale:Number;
19 private var offset_lat:Number=0;
20 private var offset_lon:Number=0;
21 private var inited:Boolean;
23 public function Yahoo(w:Number, h:Number, map:Map) {
25 this.init(token, w, h);
26 this.mapType="satellite";
30 this.addEventListener(YahooMapEvent.MAP_INITIALIZE, initHandler);
33 public function show():void {
35 if (inited) { moveto(map.centre_lat, map.centre_lon, map.scale); }
37 map.addEventListener(MapEvent.MOVE, moveHandler);
38 map.addEventListener(MapEvent.RESIZE, resizeHandler);
39 map.addEventListener(MapEvent.NUDGE_BACKGROUND, nudgeHandler);
42 public function hide():void {
45 map.removeEventListener(MapEvent.MOVE, moveHandler);
46 map.removeEventListener(MapEvent.RESIZE, resizeHandler);
47 map.removeEventListener(MapEvent.NUDGE_BACKGROUND, nudgeHandler);
50 private function initHandler(event:YahooMapEvent):void {
52 if (map.centre_lat) { moveto(map.centre_lat, map.centre_lon, map.scale); }
53 this.removeEventListener(YahooMapEvent.MAP_INITIALIZE, initHandler);
56 private function moveHandler(event:MapEvent):void {
57 if (!inited) { return; }
58 moveto(event.params.lat, event.params.lon, event.params.scale);
61 private function moveto(lat:Number,lon:Number,scale:uint):void {
62 if (scale>MAXZOOM) { this.visible=false; return; }
63 _lat=lat; _lon=lon; _scale=scale;
66 this.zoomLevel=18-scale;
67 this.centerLatLon=new LatLon(lat+offset_lat, lon+offset_lon);
70 private function resizeHandler(event:MapEvent):void {
71 this.setSize(event.params.width, event.params.height);
74 private function nudgeHandler(event:MapEvent):void {
75 var cx:Number=map.lon2coord(map.centre_lon);
76 var cy:Number=map.lat2coord(map.centre_lat);
77 offset_lon+=map.coord2lon(cx-event.params.x)-map.centre_lon;
78 offset_lat+=map.coord2lat(cy-event.params.y)-map.centre_lat;
79 moveto(_lat,_lon,_scale);