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=false;
23 public function Yahoo(w:Number, h:Number, map:Map) {
25 this.init(token, w, h);
26 this.mapType="satellite";
32 public function show():void {
35 moveto(map.centre_lat, map.centre_lon, map.scale);
37 this.addEventListener(YahooMapEvent.MAP_INITIALIZE, initHandler);
40 map.addEventListener(MapEvent.MOVE, moveHandler);
41 map.addEventListener(MapEvent.RESIZE, resizeHandler);
42 map.addEventListener(MapEvent.NUDGE_BACKGROUND, nudgeHandler);
45 public function hide():void {
48 map.removeEventListener(MapEvent.MOVE, moveHandler);
49 map.removeEventListener(MapEvent.RESIZE, resizeHandler);
50 map.removeEventListener(MapEvent.NUDGE_BACKGROUND, nudgeHandler);
53 private function initHandler(event:YahooMapEvent):void {
55 moveto(map.centre_lat, map.centre_lon, map.scale);
56 this.removeEventListener(YahooMapEvent.MAP_INITIALIZE, initHandler);
59 private function moveHandler(event:MapEvent):void {
60 if (!inited) { return; }
61 moveto(event.params.lat, event.params.lon, event.params.scale);
64 private function moveto(lat:Number,lon:Number,scale:uint):void {
65 if (scale>MAXZOOM) { this.visible=false; return; }
66 _lat=lat; _lon=lon; _scale=scale;
69 this.zoomLevel=18-scale;
70 this.centerLatLon=new LatLon(lat+offset_lat, lon+offset_lon);
73 private function resizeHandler(event:MapEvent):void {
74 this.setSize(event.params.width, event.params.height);
77 private function nudgeHandler(event:MapEvent):void {
78 var cx:Number=map.lon2coord(map.centre_lon);
79 var cy:Number=map.lat2coord(map.centre_lat);
80 offset_lon+=map.coord2lon(cx-event.params.x)-map.centre_lon;
81 offset_lat+=map.coord2lat(cy-event.params.y)-map.centre_lat;
82 moveto(_lat,_lon,_scale);