ArcGIS Flex API 调用天地图和Google地图服务
发布时间:2020-12-15 05:07:09 所属栏目:百科 来源:网络整理
导读:Esri为我们提供了TiledMapServiceLayer类,这个类正是所有瓦片地图服务都必须继承的类,像ArcGISTiledMapServiceLayer,OpenStreetMapLayer,VETiledLayer等esri提供的瓦片类都是继承了该类的,所以我们要扩展该TiledMapServiceLayer类 一.调用天地图服务( SX
Esri为我们提供了TiledMapServiceLayer类,这个类正是所有瓦片地图服务都必须继承的类,像ArcGISTiledMapServiceLayer,OpenStreetMapLayer,VETiledLayer等esri提供的瓦片类都是继承了该类的,所以我们要扩展该TiledMapServiceLayer类 一.调用天地图服务(SXGeoTileLayer类) import com.esri.ags.SpatialReference; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.supportClasses.LOD; import com.esri.ags.layers.supportClasses.TileInfo; import com.esri.ags.layers.TiledMapServiceLayer; import com.esri.ags.layers.TiledMapServiceLayer; import flash.geom.Point; import flash.net.URLRequest; /** * SXGeoTileLayer */ public class SXGeoTileLayer extends TiledMapServiceLayer { //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Creates a new PortlandTiledMapServiceLayer object. */ public function SXGeoTileLayer() { super(); buildTileInfo(); // to create our hardcoded tileInfo setLoaded(true); // Map will only use loaded layers } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- private var wkid:int = 4326; private var _tileInfo:TileInfo = new TileInfo(); // see buildTileInfo() private var _url:String = new String(); //private var _wmsLayer:String = new String(); //-------------------------------------------------------------------------- // // Overridden properties // fullExtent() // initialExtent() // spatialReference() // tileInfo() // units() // //-------------------------------------------------------------------------- //---------------------------------- // fullExtent // - required to calculate the tiles to use //---------------------------------- override public function get fullExtent():Extent { return new Extent(-180,-90,180,90,new SpatialReference(4326)); //return new Extent(65.94,18.84,137.74,62.85,new SpatialReference(4326)); } //---------------------------------- // initialExtent // - needed if Map doesn't have an extent //---------------------------------- override public function get initialExtent():Extent { return new Extent(-124.731422,24.955967,-66.969849,49.371735,new SpatialReference(4326)); //return new Extent(112.48,47.77,112.60,47.97,new SpatialReference(4326)); } //---------------------------------- // spatialReference // - needed if Map doesn't have a spatialReference //---------------------------------- override public function get spatialReference():SpatialReference { return new SpatialReference(4326); } //---------------------------------- // tileInfo //---------------------------------- override public function get tileInfo():TileInfo { return _tileInfo; } //---------------------------------- // units // - needed if Map doesn't have it set //---------------------------------- override public function get units():String { return "esriDecimalDegrees"; } //-------------------------------------------------------------------------- // // Overridden methods // getTileURL(level:Number,row:Number,col:Number):URLRequest // //-------------------------------------------------------------------------- override protected function getTileURL(level:Number,col:Number):URLRequest { var url:String ; url = _url + "&X=" + col.toString() + "&Y=" + row.toString()+ "&L="+ level.toString(); return new URLRequest(url) ; } //-------------------------------------------------------------------------- // // Private Methods // //-------------------------------------------------------------------------- private function buildTileInfo():void { _tileInfo.height = 256; _tileInfo.width = 256; _tileInfo.origin = new MapPoint(-180,90); _tileInfo.spatialReference = new SpatialReference(4326); _tileInfo.lods = [ //new LOD(0,1.40625,590995197.1416691),new LOD(1,0.703125,295497598.5708346),new LOD(2,0.3515625,147748799.2854173),new LOD(3,0.17578125,73874399.64270864),new LOD(4,0.087890625,36937199.82135432),new LOD(5,0.0439453125,18468599.91067716),new LOD(6,0.02197265625,9234299.95533858),new LOD(7,0.010986328125,4617149.97766929),new LOD(8,0.0054931640625,2308574.98883465),new LOD(9,0.00274658203124999,1154287.49441732),new LOD(10,0.001373291015625,577143.747208662),new LOD(11,0.0006866455078125,288571.873604331),new LOD(12,0.000343322753906249,144285.936802165),new LOD(13,0.000171661376953125,72142.9684010827),new LOD(14,0.0000858306884765626,36071.4842005414),new LOD(15,0.0000429153442382813,18035.7421002707),new LOD(16,0.0000214576721191406,9017.87105013534),]; } private function padString(text:String,size:int,ch:String):String { while (text.length < size) { text = ch + text; } return text; } public function set url(val:String):void { this._url = val; } }使用方法: var wmslayer:SXGeoTileLayer=new SXGeoTileLayer(); wmslayer.url=" http://tile0.tianditu.com/DataServer?T=A0610_ImgAnno"; map.addLayer(wmslayer); 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.*; import flash.net.URLRequest; //扩展TiledMapServiceLayer图层实现加载google地图 public class GoogleMapLayer extends TiledMapServiceLayer { private var _tileInfo:TileInfo=new TileInfo(); private var _baseURL:String=""; public function GoogleMapLayer() { super(); buildTileInfo(); setLoaded(true); } override public function get fullExtent():Extent { return new Extent(-20037508.342787,-20037508.342787,20037508.342787,new SpatialReference(102113)); } override public function get initialExtent():Extent { return new Extent(-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,col:Number):URLRequest { var url:String=_baseURL&+ "x=" + col + "&" + "y=" + row + "&" + "z=" + level+ "&s="; return new URLRequest(url); } public function set url(val:String):void { this._baseURL = val; } 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),78271.5169639999,295828763.795777),39135.7584820001,147914381.897889),19567.8792409999,73957190.948944),9783.93962049996,36978595.474472),4891.96981024998,18489297.737236),2445.98490512499,9244648.868618),1222.99245256249,4622324.434309),611.49622628138,2311162.217155),305.748113140558,1155581.108577),152.874056570411,577790.554289),76.4370282850732,288895.277144),38.2185141425366,144447.638572),19.1092570712683,72223.819286),9.55462853563415,36111.909643),4.77731426794937,18055.954822),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) ]; } } 使用方法: var wmslayer:GoogleMapLayer =new GoogleMapLayer(); wmslayer.url="http://khm2.google.com/kh/v=38&hl=zh-CN"; map.addLayer(wmslayer); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |