(1)幫助類GoogleLayer.ashtml
/* * 根據輸入的地圖類型加載Google地圖(by chenyuming) */ package Layers { import com.esri.ags.SpatialReference; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.TiledMapServiceLayer; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; public class GoogleLayer extends TiledMapServiceLayer { private var _tileInfo:TileInfo=new TileInfo(); private var _baseURL:String=""; private var MapStyle:String=""; public function GoogleLayer(mapStyle:String) { this.MapStyle=mapStyle; super(); buildTileInfo(); setLoaded(true); } override public function get fullExtent():Extent { return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113)); } override public function get initialExtent():Extent { return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113)); } override public function get spatialReference():SpatialReference { return new SpatialReference(102113); } override public function get tileInfo():com.esri.ags.layers.supportClasses.TileInfo { return _tileInfo; } override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest { var s:String = "Galileo".substring(0, ((3 * col + row) % 8)); var url:String =""; if (this.MapStyle == "Vector")//獲取矢量地圖 { url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=m@158000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; } else if (this.MapStyle == "Terrain")//獲取地形圖 { url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; } else if (this.MapStyle == "Image")//獲取影像地圖 { url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=s&hl=en&gl=en&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; } else if (this.MapStyle == "POI")//獲取道路等POI,和影像地圖配合使用 { url = "http://mt" + (col % 4) + ".google.com/vt/imgtp=png32&lyrs=h@169000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; } return new URLRequest(url); } public function set url(vals:String):void { this._baseURL = vals; } private function buildTileInfo():void { _tileInfo.height=256; _tileInfo.width=256; _tileInfo.origin=new MapPoint(-20037508.342787, 20037508.342787); _tileInfo.spatialReference=new SpatialReference(102113); _tileInfo.lods = [ new LOD(0, 156543.033928, 591657527.591555), new LOD(1, 78271.5169639999, 295828763.795777), new LOD(2, 39135.7584820001, 147914381.897889), new LOD(3, 19567.8792409999, 73957190.948944), new LOD(4, 9783.93962049996, 36978595.474472), new LOD(5, 4891.96981024998, 18489297.737236), new LOD(6, 2445.98490512499, 9244648.868618), new LOD(7, 1222.99245256249, 4622324.434309), new LOD(8, 611.49622628138, 2311162.217155), new LOD(9, 305.748113140558, 1155581.108577), new LOD(10, 152.874056570411, 577790.554289), new LOD(11, 76.4370282850732, 288895.277144), new LOD(12, 38.2185141425366, 144447.638572), new LOD(13, 19.1092570712683, 72223.819286), new LOD(14, 9.55462853563415, 36111.909643), new LOD(15, 4.77731426794937, 18055.954822), new LOD(16, 2.38865713397468, 9027.977411), new LOD(17, 1.19432856685505, 4513.988705), new LOD(18, 0.597164283559817, 2256.994353), new LOD(19, 0.298582141647617, 1128.497176) ]; } public function lon2Mercator(px:int):int { var x:int = px * 20037508.34 / 180; return x; } public function lat2Mercator(py:int):int { var y:int; y = Math.log(Math.tan((90 + py) * Math.PI / 360)) / (Math.PI / 180); y = y * 20037508.34 / 180; return y; } } }
(2)引用方法web
//加載google地圖 var baseLayer:GoogleLayer = new GoogleLayer("Image") baseMap.addLayer(baseLayer);
(1)幫助類BaiduLayer.aside
/* * 根據輸入的地圖類型加載百度地圖(by chenyuming) */ package Layers { import com.esri.ags.SpatialReference; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.TiledMapServiceLayer; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; import flashx.textLayout.formats.Float; public class BaiduLayer extends TiledMapServiceLayer { //成員變量 private var _tileInfo:TileInfo = new TileInfo(); private var _wkid:int = 102100; private var cornerCoordinate:Number = 20037508.3427892; private var _mapStyle:String = "Image"; private var _initialExtent:Extent; public function BaiduLayer(mapStyle:String) { this._mapStyle = mapStyle; super(); buildTileInfo(); // to create our hardcoded tileInfo setLoaded(true); // Map will only use loaded layers } // 全屏範圍 override public function get fullExtent():Extent { return new Extent(-cornerCoordinate, -cornerCoordinate, cornerCoordinate, cornerCoordinate, new SpatialReference(_wkid)); } // 初始化範圍 (左下角座標,右上角座標) override public function get initialExtent():Extent { return new Extent(5916776.8, 1877209.3, 19242502.6, 7620381.8, new SpatialReference(102100)); } // 空間參考系 override public function get spatialReference():SpatialReference { return new SpatialReference(_wkid); } override public function get tileInfo():TileInfo { return _tileInfo; } override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest { var zoom:int = level - 1; var offsetX:int = Math.pow(2, zoom) as int; var offsetY:int = offsetX - 1; var numX:int = col - offsetX; var numY:int = (-row) + offsetY; zoom = level + 1; var num:int = (col + row) % 8 + 1; var url:String = null; if (_mapStyle == "Vector") //獲取矢量地圖 { url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+ numY + ";z=" + zoom + ";v=013;type=web&fm=44"; } else if (_mapStyle == "Image") //影像地圖 { url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+numY+";z="+zoom+";v=009;type=sate&fm=46"; } else if (_mapStyle == "POI") //獲取道路等POI,和影像地圖配合使用 { url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+numY+";z="+zoom+";v=013;type=trans&fm=47"; } return new URLRequest(url); } // 自定義方法,定義地圖縮放等級 private function buildTileInfo():void { _tileInfo.height=256; _tileInfo.width=256; _tileInfo.origin=new MapPoint(-cornerCoordinate, cornerCoordinate); _tileInfo.spatialReference=new SpatialReference(_wkid); _tileInfo.lods = [ new LOD(0, 156543.033928, 591657527.591555), new LOD(1, 78271.5169639999, 295828763.795777), new LOD(2, 39135.7584820001, 147914381.897889), new LOD(3, 19567.8792409999, 73957190.948944), new LOD(4, 9783.93962049996, 36978595.474472), new LOD(5, 4891.96981024998, 18489297.737236), new LOD(6, 2445.98490512499, 9244648.868618), new LOD(7, 1222.99245256249, 4622324.434309), new LOD(8, 611.49622628138, 2311162.217155), new LOD(9, 305.748113140558, 1155581.108577), new LOD(10, 152.874056570411, 577790.554289), new LOD(11, 76.4370282850732, 288895.277144), new LOD(12, 38.2185141425366, 144447.638572), new LOD(13, 19.1092570712683, 72223.819286), new LOD(14, 9.55462853563415, 36111.909643), new LOD(15, 4.77731426794937, 18055.954822), new LOD(16, 2.38865713397468, 9027.977411), new LOD(17, 1.19432856685505, 4513.988705), new LOD(18, 0.597164283559817, 2256.994353), new LOD(19, 0.298582141647617, 1128.497176) ]; } } }
(2)引用方法ui
//加載百度地圖 var baseLayer:BaiduLayer = new BaiduLayer("Image"); var POILayer:BaiduLayer = new BaiduLayer("POI"); baseMap.addLayer(baseLayer); baseMap.addLayer(POILayer);
(1)幫助類TianDiTuLayer.asthis
/* * 根據輸入的地圖類型加載天地圖(by chenyuming) * 注意:投影類型爲經緯度 */ package Layers { import com.esri.ags.SpatialReference; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; import com.esri.ags.layers.TiledMapServiceLayer; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; import flash.sampler.Sample; public class TianDiTuLayer extends TiledMapServiceLayer { private var _tileInfo:TileInfo; private var _baseURL:String; private var _baseURLs:Array; private var _initExtent:String; private var _serviceMode:String; private var _imageFormat:String; private var _layerId:String; private var _tileMatrixSetId:String; private var _mapStyle:String=""; public function TianDiTuLayer(mapStyle:String,serviceMode:String = "KVP",imageFormat:String = "tiles") { this._mapStyle=mapStyle;//設置地圖類型 this._serviceMode = serviceMode; this._imageFormat = imageFormat; super(); this._tileInfo = new TileInfo(); this._initExtent = null; this.buildTileInfo(); setLoaded(true); } override public function get fullExtent() : Extent { return new Extent(-180, -90, 180, 90, new SpatialReference(4490)); } public function set initExtent(initextent:String):void { this._initExtent = initextent; } override public function get initialExtent() :Extent { if (this._initExtent == null) return new Extent(70.0, 15.0, 135.0, 55.0, new SpatialReference(4490)); var coors:Array = this._initExtent.split(","); return new Extent(Number(coors[0]), Number(coors[1]), Number(coors[2]) ,Number(coors[3]), new SpatialReference(4490)); } override public function get spatialReference() : SpatialReference { return new SpatialReference(4490); } override public function get tileInfo() : TileInfo { return this._tileInfo; } //根據不一樣地圖類型加載不一樣WMTS服務 override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest { if(this._mapStyle == "ImageBaseMap")//獲取影像地圖(底圖) { _baseURL = "http://t0.tianditu.com/img_c/wmts"; _layerId = "img"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "ImageCNNote")//獲取影像地圖(中文註記) { _baseURL = "http://t0.tianditu.com/cia_c/wmts"; _layerId = "cia"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "ImageENNote")//獲取影像地圖(英文註記) { _baseURL = "http://t0.tianditu.com/eia_c/wmts"; _layerId = "eia"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "TerrainBaseMap")//獲取地形圖(底圖) { _baseURL = "http://t0.tianditu.com/ter_c/wmts"; _layerId = "ter"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "TerrainCNNote")//獲取地形圖(中文註記) { _baseURL = "http://t0.tianditu.com/cta_c/wmts"; _layerId = "cta"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "TerrainENNote")//獲取地形圖(英文註記) { //暫無 } else if(this._mapStyle == "VectorBaseMap")//獲取矢量圖(底圖) { _baseURL = "http://t0.tianditu.com/vec_c/wmts"; _layerId = "vec"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "VectorCNNote")//獲取矢量圖(中文註記) { _baseURL = "http://t0.tianditu.com/cva_c/wmts"; _layerId = "cva"; _tileMatrixSetId = "c"; } else if(this._mapStyle == "VectorENNote")//獲取矢量圖(英文註記) { _baseURL = "http://t0.tianditu.com/eva_c/wmts"; _layerId = "eva"; _tileMatrixSetId = "c"; } var urlRequest:String=_baseURL+ "/wmts?Service=WMTS&Request=GetTile&Version=1.0.0" + "&Style=Default&Format="+_imageFormat+"&serviceMode="+_serviceMode+"&layer="+_layerId + "&TileMatrixSet="+_tileMatrixSetId+"&TileMatrix=" + level + "&TileRow=" + row + "&TileCol=" + col; return new URLRequest(urlRequest); } //切片信息 private function buildTileInfo() : void { this._tileInfo.height = 256; this._tileInfo.width = 256; this._tileInfo.origin = new MapPoint(-180, 90); this._tileInfo.spatialReference = new SpatialReference(4490); this._tileInfo.lods = new Array(); this._tileInfo.lods = [ new LOD(1 , 0.703125, 2.958293554545656E8), new LOD(2 , 0.351563, 1.479146777272828E8), new LOD(3 , 0.175781, 7.39573388636414E7), new LOD(4 , 0.0878906, 3.69786694318207E7), new LOD(5 , 0.0439453, 1.848933471591035E7), new LOD(6 , 0.0219727, 9244667.357955175), new LOD(7 , 0.0109863, 4622333.678977588), new LOD(8 , 0.00549316, 2311166.839488794), new LOD(9 , 0.00274658, 1155583.419744397), new LOD(10, 0.00137329, 577791.7098721985), new LOD(11, 0.000686646, 288895.85493609926), new LOD(12, 0.000343323, 144447.92746804963), new LOD(13, 0.000171661, 72223.96373402482), new LOD(14, 8.58307e-005, 36111.98186701241), new LOD(15, 4.29153e-005, 18055.990933506204), new LOD(16, 2.14577e-005, 9027.995466753102), new LOD(17, 1.07289e-005, 4513.997733376551), new LOD(18, 5.36445e-006, 2256.998866688275) ]; } } }
(2)引用方法google
//加載天地圖(經緯度投影) var baseLayer:TianDiTuLayer = new TianDiTuLayer("VectorBaseMap")//天地圖底圖 var CNNoteLayer:TianDiTuLayer = new TianDiTuLayer("VectorCNNote");//中文註記 baseMap.addLayer(baseLayer); baseMap.addLayer(CNNoteLayer);
(1)幫助類TianDiTuLayerMercator.asurl
/* * 根據輸入的地圖類型加載天地圖(by chenyuming) * 注意:投影類型爲球形墨卡託 */ package Layers { import com.esri.ags.SpatialReference; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.ArcGISDynamicMapServiceLayer; import com.esri.ags.layers.TiledMapServiceLayer; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; import flash.sampler.Sample; public class TianDiTuLayerMercator extends TiledMapServiceLayer { private var _tileInfo:TileInfo; private var _baseURL:String; private var _baseURLs:Array; private var _initExtent:String; private var _layerId:String; private var _mapStyle:String=""; public function TianDiTuLayerMercator(mapStyle:String) { this._mapStyle=mapStyle;//設置地圖類型 super(); this._tileInfo = new TileInfo(); this._initExtent = null; this.buildTileInfo(); setLoaded(true); } override public function get fullExtent() : Extent { return new Extent(-20037508.3427892,-20037508.3427892, 20037508.3427892,20037508.3427892, new SpatialReference(3857)); } public function set initExtent(initextent:String):void { this._initExtent = initextent; } override public function get initialExtent() :Extent { if (this._initExtent == null) return new Extent(8397502.3, 2660018.1, 15003861.0, 5509344.0, new SpatialReference(3857)); var coors:Array = this._initExtent.split(","); return new Extent(Number(coors[0]), Number(coors[1]), Number(coors[2]) ,Number(coors[3]), new SpatialReference(3857)); } override public function get spatialReference() : SpatialReference { return new SpatialReference(3857); } override public function get tileInfo() : TileInfo { return this._tileInfo; } //根據不一樣地圖類型加載不一樣WMTS服務 override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest { _baseURL = "http://t0.tianditu.com"; if(this._mapStyle == "ImageBaseMap")//獲取影像地圖(底圖) { _layerId = "img_w"; } else if(this._mapStyle == "ImageCNNote")//獲取影像地圖(中文註記) { _layerId = "cia_w"; } else if(this._mapStyle == "ImageENNote")//獲取影像地圖(英文註記) { _layerId = "eia_w"; } else if(this._mapStyle == "TerrainBaseMap")//獲取地形圖(底圖) { _layerId = "ter_w"; } else if(this._mapStyle == "TerrainCNNote")//獲取地形圖(中文註記) { _layerId = "cta_w"; } else if(this._mapStyle == "TerrainENNote")//獲取地形圖(英文註記) { //暫無 } else if(this._mapStyle == "VectorBaseMap")//獲取矢量圖(底圖) { _layerId = "vec_w"; } else if(this._mapStyle == "VectorCNNote")//獲取矢量圖(中文註記) { _layerId = "cva_w"; } else if(this._mapStyle == "VectorENNote")//獲取矢量圖(英文註記) { _layerId = "eva_w"; } var urlRequest:String =_baseURL+"/DataServer?T="+_layerId+"&x="+col+"&y="+row+"&l="+level; return new URLRequest(urlRequest); } //切片信息 private function buildTileInfo() : void { this._tileInfo.height = 256; this._tileInfo.width = 256; this._tileInfo.origin = new MapPoint(-20037508.3427892,20037508.3427892,new SpatialReference(3857)); this._tileInfo.spatialReference = new SpatialReference(3857); this._tileInfo.lods = new Array(); this._tileInfo.lods = [ new LOD(1 ,77664.761018562790697674418604651, 2.958293554545656E8), new LOD(2 ,38832.380509281395348837209302326, 1.479146777272828E8), new LOD(3 ,19416.190254640697674418604651163, 7.39573388636414E7), new LOD(4 ,9708.0951273203488372093023255814, 3.69786694318207E7), new LOD(5 ,4854.0475636601744186046511627907, 1.848933471591035E7), new LOD(6 ,2427.0237818300872093023255813953, 9244667.357955175), new LOD(7 ,1213.5118909150436046511627906977, 4622333.678977588), new LOD(8 ,606.75594545752180232558139534884, 2311166.839488794), new LOD(9 ,303.37797272876090116279069767442, 1155583.419744397), new LOD(10,151.68898636438045058139534883721, 577791.7098721985), new LOD(11, 75.844493182190225290697674418605, 288895.85493609926), new LOD(12, 37.922246591095112645348837209302, 144447.92746804963), new LOD(13, 18.961123295547556322674418604651, 72223.96373402482), new LOD(14, 9.4805616477737781613372093023256, 36111.98186701241), new LOD(15, 4.7402808238868890806686046511628, 18055.990933506204), new LOD(16, 2.3701404119434445403343023255814, 9027.995466753102), new LOD(17, 1.1850702059717222701671511627907, 4513.997733376551), new LOD(18, 0.59253510298586113508357558139535, 2256.998866688275) ]; } } }
(2)引用方法spa
//加載天地圖(球面墨卡託投影) var baseLayer:TianDiTuLayerMercator = new TianDiTuLayerMercator("ImageBaseMap")//天地圖底圖 var CNNoteLayer:TianDiTuLayerMercator = new TianDiTuLayerMercator("ImageCNNote");//中文註記 baseMap.addLayer(baseLayer); baseMap.addLayer(CNNoteLayer);
服務資源。.net