加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);


二.调用Google地图服务

    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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读