class MapsWrapper extends Map { public var bingkey:String = null; public var binglayer:Layer = null; public var currentmaptype:String = null; public var markers:VectorLayer = null; public var mouse:MouseHandler = null; private var _try_zoomlevel:Number = 1; private var _empty_tiles:Boolean = false; private var _last_valid_zoom:Number = 1; private var _new_try:Boolean = false; private var _limited:Boolean = false; function MapsWrapper(param1:String, param2:String) { super(400, 300, "EPSG:900913"); this.bingkey = param1; this.defaultZoomInFactor = 0.5; this.defaultZoomOutFactor = 2; this.setMapType(param2); this.markers = new VectorLayer("krpanoSpots"); this.markers.projection = new ProjProjection("EPSG:900913"); this.markers.generateResolutions(22); this.markers.style = Style.getDefaultPointStyle(); this.addLayer(this.markers); this.mouse = new MouseHandler(); this.addControl(this.mouse); return; }// end function public function mapMapType(param1:String) : String { param1 = param1.toLowerCase(); if (param1 == "satellite") { return "Aerial"; } if (param1 == "normal") { return "Road"; } if (param1 == "hybrid") { return "AerialWithLabels"; } return "Aerial"; }// end function public function getMapType() : String { if (this.currentmaptype == "Road") { return "normal"; } if (this.currentmaptype == "AerialWithLabels") { return "hybrid"; } return "satellite"; }// end function public function setMapType(param1:String) : void { var _loc_3:Boolean = false; var _loc_2:* = this.mapMapType(param1); if (_loc_2 != this.currentmaptype) { _loc_3 = this.currentmaptype == null; this.currentmaptype = _loc_2; if (this.binglayer) { this.removeLayer(this.binglayer); this.binglayer = null; } this.binglayer = new Bing(this.bingkey, this.currentmaptype); this.binglayer.empty_tile_callback = this.empty_tile_callback; this.addEventListener(LayerEvent.LAYER_LOAD_START, this.layer_load_start); this.addEventListener(LayerEvent.LAYER_LOAD_END, this.layer_load_end); this.addLayer(this.binglayer); this.changeLayerIndex(this.binglayer, 0); if (!_loc_3) { this.dispatchEvent(new MapEvent("BingMapsOnMapTypeChanged", this)); } } return; }// end function public function setSize(param1:Point) : void { size = new Size(param1.x, param1.y); return; }// end function private function layer_load_start(event:LayerEvent) : void { this.binglayer.generateResolutions(21, Bing.resolutions[0]); this._new_try = true; this._try_zoomlevel = this.getZoom(); this._empty_tiles = false; return; }// end function private function layer_load_end(event:LayerEvent) : void { if (this._empty_tiles == false && this._limited == false) { this._last_valid_zoom = this._try_zoomlevel; } return; }// end function private function empty_tile_callback() : void { this._empty_tiles = true; if (this._new_try) { this._new_try = false; if (this._try_zoomlevel <= this._last_valid_zoom) { this.resolution = new Resolution(this.get_bing_resolution((this._try_zoomlevel - 1)), "EPSG:900913"); } else { this._limited = true; this.binglayer.generateResolutions((this._last_valid_zoom + 1), Bing.resolutions[0]); } this.binglayer.redraw(true); } return; }// end function public function setZoom(param1:Number, param2:Boolean = false) : void { this._limited = false; param1 = Math.floor(param1); this.resolution = new Resolution(this.get_bing_resolution(param1), "EPSG:900913"); return; }// end function public function getZoom() : Number { var _loc_1:* = this.get_zoom_from_bing_resolution(this.resolution.value); _loc_1 = Math.round(_loc_1); return _loc_1; }// end function private function get_zoom_from_bing_resolution(param1:Number) : Number { var _loc_2:* = 22 - (4.7438 + 2 * (Math.log(param1) * Math.LOG10E) / (Math.log(4) * Math.LOG10E)); if (_loc_2 < 1) { _loc_2 = 1; } return _loc_2; }// end function private function get_bing_resolution(param1:Number) : Number { var _loc_2:* = Math.pow(10, (22 - 4.7438 - param1) * (Math.log(4) * Math.LOG10E) / 2); return _loc_2; }// end function public function panTo(param1:LatLng, param2:Number = NaN) : void { this.setCenter(param1, param2); return; }// end function public function panBy(param1:Number, param2:Number) : void { var _loc_3:* = this.getMapPxFromLocation(this.center); _loc_3.x = _loc_3.x + param1; _loc_3.y = _loc_3.y + param2; this.center = this.getLocationFromMapPx(_loc_3); return; }// end function public function myZoomIn() : void { var _loc_1:* = this.getZoom(); if (_loc_1 < 32) { _loc_1 = _loc_1 + 1; } this.setZoom(_loc_1); return; }// end function public function myZoomOut() : void { var _loc_1:* = this.getZoom(); _loc_1 = _loc_1 - 1; if (_loc_1 < 1) { _loc_1 = 1; } this.setZoom(_loc_1); return; }// end function public function setCenter(param1:LatLng, param2:Number = NaN) : void { if (!isNaN(param2)) { this.setZoom(param2); } this.center = param1.toLocation(); return; }// end function public function getCenter() : LatLng { return fromLocation(this.center); }// end function public function addOverlay(param1:Marker) : void { var _loc_2:* = CustomMarker.createDisplayObjectMarker(param1.mo.icon, param1.latlng.toLocation(), param1, 0, 0); param1.custommarker = _loc_2; this.markers.addFeature(_loc_2, true, false); return; }// end function public function removeOverlay(param1:Marker) : void { if (param1.custommarker) { this.markers.removeFeature(param1.custommarker); param1.custommarker = null; } return; }// end function } class MapTypeControl extends Sprite { private var maptype_control_images:Class; private var nrmbutton:Sprite = null; private var satbutton:Sprite = null; private var hybbutton:Sprite = null; private var maps:MapsWrapper = null; private var vertical:Boolean = false; function MapTypeControl(param1:MapsWrapper, param2:Boolean = false) { this.maptype_control_images = MapTypeControl_maptype_control_images; this.maps = param1; this.vertical = param2; this.maps.addEventListener("BingMapsOnMapTypeChanged", this.onMapTypeChanged); this.nrmbutton = new Sprite(); this.satbutton = new Sprite(); this.hybbutton = new Sprite(); this.nrmbutton.addChild(new this.maptype_control_images() as Bitmap); this.satbutton.addChild(new this.maptype_control_images() as Bitmap); this.hybbutton.addChild(new this.maptype_control_images() as Bitmap); this.nrmbutton.buttonMode = true; this.nrmbutton.useHandCursor = true; this.satbutton.buttonMode = true; this.satbutton.useHandCursor = true; this.hybbutton.buttonMode = true; this.hybbutton.useHandCursor = true; this.nrmbutton.scrollRect = new Rectangle(0, 0, 67, 21); this.satbutton.scrollRect = new Rectangle(67, 0, 67, 21); this.hybbutton.scrollRect = new Rectangle(2 * 67, 0, 67, 21); if (this.vertical) { this.nrmbutton.y = 0; this.satbutton.y = 21; this.hybbutton.y = 2 * 21; } else { this.nrmbutton.x = 0; this.satbutton.x = 67; this.hybbutton.x = 2 * 67; } this.addChild(this.nrmbutton); this.addChild(this.satbutton); this.addChild(this.hybbutton); this.nrmbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.setnrm); this.nrmbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); this.satbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.setsat); this.satbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); this.hybbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.sathyb); this.hybbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); var _loc_3:* = this.maps.getMapType(); if (_loc_3 == "normal") { this.setnrm(); } else if (_loc_3 == "satellite") { this.setsat(); } else if (_loc_3 == "hybrid") { this.sathyb(); } return; }// end function private function onMapTypeChanged(event:MapEvent) : void { var _loc_2:* = this.maps.getMapType(); if (_loc_2 == "normal") { this.setnrm(); } else if (_loc_2 == "satellite") { this.setsat(); } else if (_loc_2 == "hybrid") { this.sathyb(); } return; }// end function private function blockmouse(param1 = null) : void { if (param1) { param1.stopPropagation(); param1.preventDefault(); param1.stopImmediatePropagation(); } return; }// end function private function setnrm(param1 = null) : void { if (param1) { this.blockmouse(param1); this.maps.setMapType("normal"); } this.nrmbutton.scrollRect = new Rectangle(0, 21, 67, 21); this.satbutton.scrollRect = new Rectangle(67, 0, 67, 21); this.hybbutton.scrollRect = new Rectangle(2 * 67, 0, 67, 21); return; }// end function private function setsat(param1 = null) : void { if (param1) { this.blockmouse(param1); this.maps.setMapType("satellite"); } this.nrmbutton.scrollRect = new Rectangle(0, 0, 67, 21); this.satbutton.scrollRect = new Rectangle(67, 21, 67, 21); this.hybbutton.scrollRect = new Rectangle(2 * 67, 0, 67, 21); return; }// end function private function sathyb(param1 = null) : void { if (param1) { this.blockmouse(param1); this.maps.setMapType("hybrid"); } this.nrmbutton.scrollRect = new Rectangle(0, 0, 67, 21); this.satbutton.scrollRect = new Rectangle(67, 0, 67, 21); this.hybbutton.scrollRect = new Rectangle(2 * 67, 21, 67, 21); return; }// end function public function setControlPosition(param1:String, param2:Number, param3:Number) : void { var _loc_4:* = this.maps.size.w; var _loc_5:* = this.maps.size.h; var _loc_6:* = this.vertical ? (67) : (3 * 67); var _loc_7:* = this.vertical ? (3 * 21) : (21); var _loc_8:* = param1.indexOf("left") >= 0 && param1.indexOf("right") < 0; var _loc_9:* = param1.indexOf("top") >= 0 && param1.indexOf("bottom") < 0; if (_loc_8) { this.x = param2; } else { this.x = _loc_4 - _loc_6 - param2; } if (_loc_9) { this.y = param3; } else { this.y = _loc_5 - _loc_7 - param3; } return; }// end function } class PositionControl extends Sprite { private var pan_control_images:Class; private var maps:MapsWrapper = null; private var startpos:LatLng; private var startzoom:Number = 1; function PositionControl(param1:MapsWrapper) { var _maps:* = param1; this.pan_control_images = PositionControl_pan_control_images; this.startpos = new LatLng(0, 0); this.maps = _maps; this.startpos = this.maps.getCenter(); this.startzoom = this.maps.getZoom(); this.createbutton(new Rectangle(22, 1, 17, 17), 21, 0, function () : void { maps.panBy(0, -25); return; }// end function ); this.createbutton(new Rectangle(1, 22, 17, 17), 0, 21, function () : void { maps.panBy(-25, 0); return; }// end function ); this.createbutton(new Rectangle(43, 22, 17, 17), 42, 21, function () : void { maps.panBy(25, 0); return; }// end function ); this.createbutton(new Rectangle(22, 43, 17, 17), 21, 42, function () : void { maps.panBy(0, 25); return; }// end function ); this.createbutton(new Rectangle(22, 22, 17, 17), 21, 21, function () : void { maps.panTo(startpos, startzoom); return; }// end function ); return; }// end function private function createbutton(param1:Rectangle, param2:int, param3:int, param4:Function) : void { var b:Sprite; var rc_over:Rectangle; var rc:* = param1; var x:* = param2; var y:* = param3; var fu:* = param4; b = new Sprite(); rc_over = rc.clone(); rc_over.x = rc.x + 61; b.addChild(new this.pan_control_images() as Bitmap); b.buttonMode = true; b.useHandCursor = true; b.scrollRect = rc; b.x = x; b.y = y; b.addEventListener(MouseEvent.MOUSE_DOWN, function (event:MouseEvent) : void { event.preventDefault(); event.stopImmediatePropagation(); event.stopPropagation(); b.scrollRect = rc_over; return; }// end function ); b.addEventListener(MouseEvent.MOUSE_UP, function (event:MouseEvent) : void { event.preventDefault(); event.stopImmediatePropagation(); event.stopPropagation(); b.scrollRect = rc; fu(); return; }// end function ); this.addChild(b); return; }// end function public function setControlPosition(param1:String, param2:Number, param3:Number) : void { var _loc_4:* = this.maps.size.w; var _loc_5:* = this.maps.size.h; var _loc_6:Number = 59; var _loc_7:Number = 59; var _loc_8:* = param1.indexOf("left") >= 0 && param1.indexOf("right") < 0; var _loc_9:* = param1.indexOf("top") >= 0 && param1.indexOf("bottom") < 0; if (_loc_8) { this.x = param2; } else { this.x = _loc_4 - _loc_6 - param2; } if (_loc_9) { this.y = param3; } else { this.y = _loc_5 - _loc_7 - param3; } return; }// end function } class LatLng extends Object { public var lat:Number = 0; public var lng:Number = 0; function LatLng(param1:Number, param2:Number) { this.lat = param1; this.lng = param2; return; }// end function public function toLocation() : Location { var _loc_1:* = new ProjPoint(this.lng, this.lat); _loc_1 = Proj4as.transform(ProjProjection.getProjProjection("EPSG:4326"), ProjProjection.getProjProjection("EPSG:900913"), _loc_1); return new Location(_loc_1.x, _loc_1.y, "EPSG:900913"); }// end function public static function fromLocation(param1:Location) : LatLng { var _loc_2:* = new ProjPoint(param1.x, param1.y); _loc_2 = Proj4as.transform(ProjProjection.getProjProjection("EPSG:900913"), ProjProjection.getProjProjection("EPSG:4326"), _loc_2); return new LatLng(_loc_2.y, _loc_2.x); }// end function }