`

ArcGIS API for Flex 调用天地图、e都会瓦片地图

 
阅读更多

 

ArcGIS API for Flex 调用天地图、e都会瓦片地图


Admin
2011年9月8日

名人名言:人生是个艰辛的历程,让我自己的一生过得完美一点儿已经很不容易了,怎么能指望去教导别人如何过好他的一生呢?——毛姆 

        众所周知,像天地图和e都会的地图都是以切片的情势存放在办事端的,体系按照用户选择的局限加载该局限的瓦片地图,这比传统的及时衬着地图的响应速度更快。google地图和baidu地图的道理也不过乎如此。


        所以说,若是本地硬盘上有瓦片地图,或者我们知道瓦片地图在长途办事器端的组织情势,哄骗简单的javascript脚本说话和浏览器就可以实现对地图的浏览,通俗地说,这其实就是一个图片浏览器。推敲到长途办事器须要收集连接,比来哄骗闲暇时候将长沙市局限的e都会上的瓦片下载到本地,如许在没有收集的景象下也能浏览地图了。


        采取网上广泛撒播的完全哄骗js脚本写的开源“webgis完全功能例子”,换上本地硬盘高低载好的长沙局限内e都会地图,结果图如下。



        当然,以上是收集上js高手写的API,功能不是很强大,然则至少为我等开辟者供给了值得鉴戒的思路。


        esri也供给了可以浏览瓦片地图的API,包含javascript API,silverlight API和flex API,作为客户端说话,这三者供给的功能大致类似,甚至在类的定名上都对峙了高度的一致性。哄骗arcgis api for javascript同样可以将下载到本地的瓦片和长途办事器端的瓦片进行地图浏览,本人连络比来做的哄骗ArcGIS API for Flex(以下简称ags4fx)加载天地图的瓦片地图来申明该过程,javascript api和silverlight api可以参考该办法加载瓦片地图。


        按照最新的ags4fx 2.4可知,esri为我们供给了TiledMapServiceLayer类,这个类恰是所有瓦片地图办事都必须持续的类,像ArcGISTiledMapServiceLayer, OpenStreetMapLayer, VETiledLayer等esri供给的瓦片类都是持续了该类的,所以我们要扩大该TiledMapServiceLayer类,名字暂且叫TianDiTuTiledMapServiceLayer。


        从TiledMapServiceLayer类的API可知,fullExtent属性、tileInfo属性、units属性和getTileURL()办法是子类必必要重写的,于是最简单的TianDiTuTiledMapServiceLayer类定义如下:



package tdt
{
    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 TianDiTuTiledMapServiceLayer extends TiledMapServiceLayer
    {
        private var _tileInfo:TileInfo;
        /*
        一幅完全的图片url有如下格局:http://tile0.tianditu.com/DataServer?T=sbsm0210&X=1&Y=1&L=1
        */
        private var _baseURL:String;/* http://tile */
        private var _baseURLs:Array;/* 由诸如.tianditu.com/DataServer?T=sbsm0210构成的数组 */
        private var _initExtent:String;
        
        private var _id:String;
        private var _name:String;
        private var _alpha:Number;
        private var _visible:Boolean;
        
        public function TiandituTiledMapServiceLayer()
        {
            this._tileInfo = new TileInfo();
            this._baseURLs = [];
            this._initExtent = null;
            this.buildTileInfo();//设置tileinfo信息
            setLoaded(true);
        }
        
        
        public function set baseURL(baseurl:String):void
        {
            _baseURL = baseurl;
        }
        public function set baseURLs(baseurls:Array):void
        {
            _baseURLs = baseurls;
        }
        
        override public function get fullExtent() : Extent
        {
            return new Extent(-180, -90, 180, 90, new SpatialReference(4326));
        }
        
        public function set initExtent(initextent:String):void
        {
            this._initExtent = initextent;
        }
        override public function get initialExtent() :Extent
        {
            if (this._initExtent == null)//若是没有设备initExtent节点,则默认初始局限为长沙市区
                return new Extent(111.9, 27.85, 114.25, 28.67, new SpatialReference(4326));    
            var coors:Array = this._initExtent.split(",");
            return new Extent(Number(coors[0]), Number(coors[1]), Number(coors[2]) ,Number(coors[3]), new SpatialReference(4326));
        }
        
        override public function get spatialReference() : SpatialReference
        {
            return new SpatialReference(4326);
        }
        
        override public function get tileInfo() : TileInfo
        {
            return this._tileInfo;
        }
        
        override public function get units() : String
        {
            return "esriDecimalDegrees";
        }
        
        override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest
        {
            var url:String = null;
            var rank:Number = this._baseURLs.length / 2;
            var tempLevel:Number = 0;
            for (var i:Number = 0; i < rank; i++)
            {
                if (tempLevel <= level && level < Number(this._baseURLs[i * 2]))
                {
                    url = this._baseURLs[i * 2 + 1];
                    break;
                }
                if (i != rank - 1)
                    tempLevel = Number(this._baseURLs[i * 2]);
            }

            //因为办事器端采取了集群技巧,http://tile0/同http://tile7/取的是同一图片

            var urlRequest:String = this._baseURL + String((Math.round(Math.random() * 6) + 1)) + url + "&X=" + String(col) + "&Y=" + String(row) + "&L=" + String((level + 1));
            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(4326);
            this._tileInfo.lods = new Array();
            this._tileInfo.lods = [
                new LOD(0, 0.703125, 2.95498e+008), 
                new LOD(1, 0.351563, 1.47749e+008), 
                new LOD(2, 0.175781, 7.38744e+007), 
                new LOD(3, 0.0878906, 3.69372e+007), 
                new LOD(4, 0.0439453, 1.84686e+007), 
                new LOD(5, 0.0219727, 9.2343e+006), 
                new LOD(6, 0.0109863, 4.61715e+006), 
                new LOD(7, 0.00549316, 2.30857e+006), 
                new LOD(8, 0.00274658, 1.15429e+006), 
                new LOD(9, 0.00137329, 577144), 
                new LOD(10, 0.000686646, 288572), 
                new LOD(11, 0.000343323, 144286), 
                new LOD(12, 0.000171661, 72143), 
                new LOD(13, 8.58307e-005, 36071.5), 
                new LOD(14, 4.29153e-005, 18035.7), 
                new LOD(15, 2.14577e-005, 9017.87), 
                new LOD(16, 1.07289e-005, 4508.9), 
                new LOD(17, 5.36445e-006, 2254.47)
            ];
        }
    }
}

在mxml页面,设备地图参数如下:



<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:viewer="com.esri.viewer.*"
    xmlns:tdt="tdt.*">
    
    <esri:Map>
        
        <tdt:TianDiTuTiledMapServiceLayer>
            <tdt:baseURL>http://tile</tdt:baseURL>
            <tdt:baseURLs>
                <mx:String>10</mx:String>
                <mx:String>.tianditu.com/DataServer?T=A0512_EMap</mx:String>
                <mx:String>12</mx:String>
                <mx:String>.tianditu.com/DataServer?T=B0627_EMap1112</mx:String>
                <mx:String>18</mx:String>
                <mx:String>.tianditu.com/DataServer?T=siwei0608</mx:String>
            </tdt:baseURLs>
        </tdt:TianDiTuTiledMapServiceLayer>
        
        <tdt:TianDiTuTiledMapServiceLayer>
            <tdt:baseURL>http://tile</tdt:baseURL>
            <tdt:baseURLs>
                <mx:String>10</mx:String>
                <mx:String>.tianditu.com/DataServer?T=sbsm0210</mx:String>
                <mx:String>11</mx:String>
                <mx:String>.tianditu.com/DataServer?T=e11</mx:String>
                <mx:String>12</mx:String>
                <mx:String>.tianditu.com/DataServer?T=e12</mx:String>
                <mx:String>13</mx:String>
                <mx:String>.tianditu.com/DataServer?T=e13</mx:String>
                <mx:String>14</mx:String>
                <mx:String>.tianditu.com/DataServer?T=eastdawnall</mx:String>
                <mx:String>18</mx:String>
                <mx:String>.tianditu.com/DataServer?T=sbsm1518</mx:String>
            </tdt:baseURLs>
            <tdt:initExtent>111.9, 27.85, 114.25, 28.67</tdt:initExtent>
        </tdt:TianDiTuTiledMapServiceLayer>
        
        <tdt:TianDiTuTiledMapServiceLayer>
            <tdt:baseURL>http://tile</tdt:baseURL>
            <tdt:baseURLs>
                <mx:String>10</mx:String>
                <mx:String>.tianditu.com/DataServer?T=A0610_ImgAnno</mx:String>
                <mx:String>14</mx:String>
                <mx:String>.tianditu.com/DataServer?T=B0530_eImgAnno</mx:String>
                <mx:String>18</mx:String>
                <mx:String>.tianditu.com/DataServer?T=siweiAnno68</mx:String>
            </tdt:baseURLs>
        </tdt:TianDiTuTiledMapServiceLayer>
        
    </esri:Map>

</s:Application>

 


加载地图后的 flex页面如下:


 


 按照这个思路,同样可以哄骗ags4fx API加载e都会的瓦片地图。。


反复上方的话,哄骗esri供给的javascript api和silverlight api实现这个结果过程是类似的,在此不赘述。




人生是个艰辛的历程,让我自己的一生过得完美一点儿已经很不容易了,怎么能指望去教导别人如何过好他的一生呢?——毛姆

分享到:
评论

相关推荐

    ArcGIS API for Flex 调用天地图源码

    总的来说,通过ArcGIS API for Flex调用天地图源码的学习,你可以了解到如何在Flex环境中集成和使用第三方地图服务,以及如何进行基本的地图操作和功能扩展。这对于开发基于GIS的应用程序,特别是在中国的地理信息...

    ArcGIS API for Flex library(整理)

    ### 一、ArcGIS Server 9.3 和 ArcGIS API for Flex 实现基本的地图浏览 #### 目的 - 在Flex程序中浏览由ArcGIS Server 9.3 发布的地图服务。 - 提供一个基本的入门示例。 #### 准备工作 1. **发布Map Service**:...

    arcgis4flex调用天地图资源

    而"arcgis4flex调用天地图资源"的主题涉及了如何将ArcGIS与中国的天地图(Tianditu)服务进行集成,以便在Flex应用中显示天地图的地理信息。 天地图是中国国家基础地理信息中心提供的公共服务平台,它提供了丰富的...

    arcgis-samples-flex-develop.zip_arcgis api for flex_flex

    ArcGIS API for Flex是Esri公司提供的一款强大的地图服务开发工具,主要用于构建交互式的Web地图应用程序。它允许开发者利用Flex这一灵活的编程语言来创建丰富的地理信息系统(GIS)应用。本文将深入探讨ArcGIS API ...

    arcgis api for flex资料

    ArcGIS API for Flex是Esri公司推出的一款用于构建地理信息系统(GIS)Web应用程序的开发框架,它结合了Flex的富互联网应用(RIA)开发能力与ArcGIS的强大地图服务功能。Flex,作为Adobe Flash平台的一部分,允许...

    arcgis api for flex 开发教程

    ArcGIS API for Flex是Esri公司提供的一个强大的工具,它允许开发者利用Adobe Flex框架创建交互式、基于Web的地图应用。本教程通过深入浅出的方式,详细介绍了如何利用这一API进行地理信息系统(GIS)的开发。 在...

    ArcGIS API for Flex开发基础大全

    《ArcGIS API for Flex开发基础大全》:打造卓越的WebGIS应用 一、ArcGIS API for Flex概述 ArcGIS API for Flex是由Esri中国信息技术有限公司提供的一个强大的开发工具集,旨在帮助开发者创建丰富的WebGIS(Web ...

    arcgis for flex 加载高德地图

    ArcGIS for Flex API允许我们创建自定义图层,通过重写`TileInfo`、`getTileUrl`等方法,我们可以将高德地图的瓦片服务集成进来。创建一个新的类,继承自`esri.layers.ArcGISTiledMapServiceLayer`或`esri.layers....

    arcgis_api_for_flex_3_6

    - **地图服务**:ArcGIS API for Flex支持多种地图服务,包括Tiled Map Service(瓦片地图服务)、Dynamic Map Service(动态地图服务)和Geocoding Service(地理编码服务)等。 - **图层管理**:可以添加、移除...

    ArcGIS_API_for_Flex

    ArcGIS API for Flex将GIS的强大功能与Flex的富用户体验相结合,使得开发者能够轻松构建具有地图浏览、查询、编辑、分析等功能的Web应用程序。 在提供的压缩文件中,有三个主要的资源: 1. "ArcGIS_API_for_Flex....

    arcgis for flex api

    在使用ArcGIS for Flex API时,开发者可以访问Esri的ArcGIS Server提供的地图服务、地理编码服务、地理处理服务等。API包含了丰富的地图操作和显示功能,如添加图层、缩放、平移、图层控制、查询、标记、地理编码等...

    天地图切片调用

    在天地图切片调用的场景中,我们可以通过arcGIS Flex API调用天地图的Web服务接口,获取所需的地图切片,并在网页上进行显示。 调用过程大致如下: 1. **初始化地图容器**:在Flex应用中,首先需要创建一个Map对象...

    TM_C_081113_ArcGIS-API-for-Flex-教程_v1.00.pdf

    本节将介绍如何利用 ArcGIS API for Flex 中的任务来查询、查找和识别地图上的要素。 **1.4.2 在 MXML 文档中嵌入 ActionScript** - 通过在 MXML 文件中嵌入 ActionScript 代码块来实现更复杂的逻辑处理。 **1.4.3...

    gis api for flex

    《ArcGIS for Flex API详解与应用实践》 ArcGIS for Flex是Esri公司推出的一款用于构建地理信息系统(GIS)Web应用程序的开发框架,它专为Adobe Flex开发者设计,结合了Flex的强大界面设计能力和ArcGIS Server的...

    ArcGis-10.1 读取 天地图 Flex API 接口工具 20130425

    集成天地图与ArcGIS 10.1的关键在于理解Flex API的工作原理和接口调用方式。Flex API提供了丰富的地图操作功能,如缩放、平移、图层管理等,并支持动态服务和图层的添加。在ArcGIS 10.1中,开发者需要通过编写...

    ArcGISFlexAPI调用天地图和Google地图服务[参考].pdf

    《ArcGIS Flex API调用天地图和Google地图服务详解》 在软件开发中,尤其是在地理信息系统(GIS)领域,调用地图服务是一项重要的任务。Esri的ArcGIS Flex API为开发者提供了一种强大的工具,可以方便地集成各种...

    arcgis-viewer-flex-3.7-src

    ArcGIS Viewer for Flex是Esri提供的一个强大的工具,它为开发者提供了丰富的地图服务、图层管理和地理分析功能,从而能够构建出定制化的GIS应用。 1. **ArcGIS Viewer for Flex**:这是Esri提供的一个轻量级的GIS...

    flex api下载

    开发者可以通过简单的API调用实现地图的加载、缩放、平移、旋转等基本操作,同时还可以添加各种类型的图层,如瓦片图层、动态图层、要素图层等,以及进行图层的透明度调整、可见性控制等高级设置。 #### 2. 数据...

Global site tag (gtag.js) - Google Analytics