public class Map extends org.openscales.core::Map { public var bingkey:String; public var binglayer:Layer; public var currentmaptype:String; public var markers:VectorLayer; 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; public function Map(param1:String, param2:String) { super(400, 300, "EPSG:900913"); contextMenu = null; this.bingkey = param1; this.defaultZoomInFactor = 0.5; this.defaultZoomOutFactor = 2; this.setMapType(param2); this.markers = new VectorLayer("easypanoTWLayer"); this.markers.projection = new ProjProjection("EPSG:900913"); this.markers.generateResolutions(22); this.markers.style = Style.getDefaultPointStyle(); this.addLayer(this.markers); this.addControl(new WheelHandler()); this.addControl(new DragHandler()); 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_2:Boolean = false; var _loc_3:* = this.mapMapType(param1); if (_loc_3 != this.currentmaptype) { _loc_2 = this.currentmaptype == null; this.currentmaptype = _loc_3; if (this.binglayer) { this.removeLayer(this.binglayer); this.binglayer = null; } this.binglayer = new Bing(this.bingkey, this.currentmaptype); this.addEventListener(LayerEvent.LAYER_LOAD_START, this.layerLoadStart); this.addEventListener(LayerEvent.LAYER_LOAD_END, this.layerLoadEnd); this.addLayer(this.binglayer); this.changeLayerIndex(this.binglayer, 0); if (!_loc_2) { this.dispatchEvent(new MapEvent("MapTypeChanged", this)); } } return; }// end function public function setSize(param1:Point) : void { size = new Size(param1.x, param1.y); return; }// end function private function layerLoadEnd(event:LayerEvent) : void { if (this._empty_tiles == false && this._limited == false) { this._last_valid_zoom = this._try_zoomlevel; } return; }// end function private function layerLoadStart(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 public function setZoom(param1:Number) : void { param1 = Math.floor(param1); if (param1 > 19) { param1 = 19; } if (param1 < 1) { param1 = 1; } this.resolution = new Resolution(this.get_bing_resolution(param1), "EPSG:900913"); return; }// end function public function getZoom() : Number { var _loc_1:* = Math.round(this.get_zoom_from_bing_resolution(this.resolution.value)); 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 < 0.5) { _loc_2 = 0.5; } 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); if (_loc_2 < 1.5) { _loc_2 = 1.5; } if (_loc_2 > 156543) { _loc_2 = 156543; } 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() + 1; this.setZoom(_loc_1); return; }// end function public function myZoomOut() : void { var _loc_1:* = this.getZoom() - 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 LatLng.fromLocation(this.center); }// end function public function addOverlay(param1:Object) : void { var _loc_2:Marker = null; var _loc_3:TWCustomMarker = null; var _loc_4:Polygon = null; if (param1 is Marker) { _loc_2 = param1 as Marker; _loc_3 = TWCustomMarker.createDisplayObjectMarker(_loc_2.mo.icon, _loc_2.latlng.toLocation(), _loc_2, 0, 0); _loc_2.custommarker = _loc_3; this.markers.addFeature(_loc_3, true, false); } else if (param1 is Polygon) { _loc_4 = param1 as Polygon; this.markers.addFeature(_loc_4, 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 } } public class MapTypeControl extends Sprite { private var nrmbutton:Sprite = null; private var satbutton:Sprite = null; private var hybbutton:Sprite = null; private var maps:Map = null; private var vertical:Boolean = false; private var MapTypeControl_maptype_control_images:Class; public function MapTypeControl(param1:Map, param2:Boolean = false) { this.MapTypeControl_maptype_control_images = MapTypeControl_MapTypeControl_maptype_control_images; this.maps = param1; this.vertical = param2; this.maps.addEventListener("MapTypeChanged", this.onMapTypeChanged); this.nrmbutton = new Sprite(); this.satbutton = new Sprite(); this.hybbutton = new Sprite(); this.nrmbutton.addChild(new this.MapTypeControl_maptype_control_images() as Bitmap); this.satbutton.addChild(new this.MapTypeControl_maptype_control_images() as Bitmap); this.hybbutton.addChild(new this.MapTypeControl_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(134, 0, 67, 21); if (this.vertical) { this.nrmbutton.y = 0; this.satbutton.y = 21; this.hybbutton.y = 42; } else { this.nrmbutton.x = 0; this.satbutton.x = 67; this.hybbutton.x = 134; } this.addChild(this.nrmbutton); this.addChild(this.satbutton); this.addChild(this.hybbutton); this.nrmbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.setNormal); this.nrmbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); this.satbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.setSatellite); this.satbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); this.hybbutton.addEventListener(MouseEvent.MOUSE_DOWN, this.satHybrid); this.hybbutton.addEventListener(MouseEvent.MOUSE_UP, this.blockmouse); var _loc_3:* = this.maps.getMapType(); if (_loc_3 == "normal") { this.setNormal(); } else if (_loc_3 == "satellite") { this.setSatellite(); } else if (_loc_3 == "hybrid") { this.satHybrid(); } return; }// end function private function onMapTypeChanged(event:MapEvent) : void { var _loc_2:* = this.maps.getMapType(); if (_loc_2 == "normal") { this.setNormal(); } else if (_loc_2 == "satellite") { this.setSatellite(); } else if (_loc_2 == "hybrid") { this.satHybrid(); } return; }// end function private function blockmouse(event:MouseEvent = null) : void { if (event) { event.stopPropagation(); event.preventDefault(); event.stopImmediatePropagation(); } return; }// end function private function setNormal(event:MouseEvent = null) : void { if (event) { this.blockmouse(event); 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 setSatellite(event:MouseEvent = null) : void { if (event) { this.blockmouse(event); 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 satHybrid(event:MouseEvent = null) : void { if (event) { this.blockmouse(event); 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 } public class PositionControl extends Sprite { private var maps:Map = null; private var startpos:LatLng; private var startzoom:Number = 1; private var PositionControl_pan_control_images:Class; public function PositionControl(param1:Map) { var _maps:* = param1; this.PositionControl_pan_control_images = PositionControl_PositionControl_pan_control_images; 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 fun:* = param4; b = new Sprite(); rc_over = rc.clone(); rc_over.x = rc.x + 61; b.addChild(new this.PositionControl_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; fun(); 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 } public class LatLng extends Object { public var lat:Number = 0; public var lng:Number = 0; public 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 }