ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”

这种方式可以提高出图速度于效果,算法见http://blog.newnaw.com/?p=633,我用ArcGIS for JavaScript API来实现。具体代码为:

 1       function initDynamicMapLayer() {
 2         dojo.declare("ogc.DynamicMapLayer", esri.layers.TiledMapServiceLayer, { // create DynamicMapLayer by extending esri.layers.TiledMapServiceLayer
 3           datetime: "",
 4           constructor: function(datetime) {
 5             this.datetime = datetime;
 6             this.spatialReference = new esri.SpatialReference({
 7               wkid: 4326
 8             });
 9             this.initialExtent = new esri.geometry.Extent(-180, -90, 180, 90, this.spatialReference);
10             this.fullExtent = new esri.geometry.Extent(-180, -90, 180, 90, this.spatialReference);
11             //
12             this.tileInfo = new esri.layers.TileInfo({
13               "dpi": "90.71428571428571",
14               "format": "image/png",
15               "compressionQuality": 0,
16               "spatialReference": {
17                 "wkid": "4326"
18               },
19               "rows": 256,
20               "cols": 256,
21               "origin": {
22                 "x": -180,
23                 "y": 90
24               },
25
26               // Scales in DPI 96
27               "lods" : [
28                   {"level" : 1, "resolution" : 0.7031249999891485, "scale" : 2.958293554545656E8},
29                   {"level" : 2, "resolution" : 0.35156249999999994, "scale" : 1.479146777272828E8},
30                   {"level" : 3, "resolution" : 0.17578124999999997, "scale" : 7.39573388636414E7},
31                   {"level" : 4, "resolution" : 0.08789062500000014, "scale" : 3.69786694318207E7},
32                   {"level" : 5, "resolution" : 0.04394531250000007, "scale" : 1.848933471591035E7},
33                   {"level" : 6, "resolution" : 0.021972656250000007, "scale" : 9244667.357955175},
34                   {"level" : 7, "resolution" : 0.01098632812500002, "scale" : 4622333.678977588},
35                   {"level" : 8, "resolution" : 0.00549316406250001, "scale" : 2311166.839488794},
36                   {"level" : 9, "resolution" : 0.0027465820312500017, "scale" : 1155583.419744397},
37                   {"level" : 10, "resolution" : 0.0013732910156250009, "scale" : 577791.7098721985},
38                   {"level" : 11, "resolution" : 0.000686645507812499, "scale" : 288895.85493609926},
39                   {"level" : 12, "resolution" : 0.0003433227539062495, "scale" : 144447.92746804963},
40                   {"level" : 13, "resolution" : 0.00017166137695312503, "scale" : 72223.96373402482},
41                   {"level" : 14, "resolution" : 0.00008583068847656251, "scale" : 36111.98186701241},
42                   {"level" : 15, "resolution" : 0.000042915344238281406, "scale" : 18055.990933506204},
43                   {"level" : 16, "resolution" : 0.000021457672119140645, "scale" : 9027.995466753102},
44                   {"level" : 17, "resolution" : 0.000010728836059570307, "scale" : 4513.997733376551},
45                   {"level" : 18, "resolution" : 0.000005364418029785169, "scale" : 2256.998866688275},
46                   {"level" : 19, "resolution" : 2.68220901485e-6, "scale": 1128.499433344138},
47                   {"level" : 20, "resolution" : 1.341104507425e-6, "scale": 564.2497166720688}
48                 ]
49
50             });
51             this.loaded = true;
52             this.onLoad(this);
53           },
54
55           getTileUrl: function(level, row, col) {
56               var resolution = 0;
57               for (var i = 0; i < this.tileInfo.lods.length; i++){
58                     var lod = this.tileInfo.lods[i];
59                     if (lod.level == level){
60                         resolution = lod.resolution;
61                     }
62               }
63               var xmin, ymin, xmax, ymax;
64               xmin = -180 + resolution * 256 * col;
65               ymin = 90 - resolution * 256 * (row + 1);
66               xmax = -180 + resolution * 256 * (col + 1);
67               ymax = 90 - resolution * 256 * row;
68               var bbox=xmin+"%2C"+ymin+"%2C"+xmax+"%2C"+ymax;
69               return "http://xxx.xxx.xxx.xxx/arcgis/rest/services/WeatherServices/MapServer/export?dpi=96&transparent=true&format=png8&dynamicLayers=%5B%7B%22id%22%3A999%2C%22source%22%3A%7B%22type%22%3A%22dataLayer%22%2C%22dataSource%22%3A%7B%22type%22%3A%22raster%22%2C%22workspaceId%22%3A1%2C%22dataSourceName%22%3A%22"+this.datetime+".gif%22%7D%7D%2C%22minScale%22%3A0%2C%22maxScale%22%3A0%7D%5D&bbox="+bbox+"&bboxSR=4326&imageSR=4326&size=256%2C256&f=image";
70           }
71         });
72       }

以上基于天地图底图,效果如下:

效果杠杠的,云图播放一点都不卡了。

时间: 2024-10-11 10:38:50

ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”的相关文章

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

关于JavaScript继承的那些事

在JavaScript中,对象的创建可以脱离类型(class free),通过字面量的方式可以很方便的创建出自定义对象. 另外,JavaScript中拥有原型这个强大的概念,当对象进行属性查找的时候,如果对象本身内找不到对应的属性,就会去搜索原型链.所以,结合原型和原型链的这个特性,JavaScript就可以用来实现对象之间的继承了. 下面就介绍一下JavaScript中的一些常用的继承方式. 原型链继承 由于原型链搜索的这个特性,在JavaScript中可以很方便的通过原型链来实现对象之间的继

Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式

原文:Arcgis for Javascript API下类似于百度搜索A.B.C.D marker的实现方式 多说无益,首先贴两张图让大家看看具体的效果: 图1.百度地图搜索结果 图2.Arcgis for JavaScript实现的效果 看到了效果,是不是各位有点小鸡动,是不是也宠宠欲动,有木有?但是具体是怎么实现的呢?下面我来详细的给各位说说我的实现思路吧. 第一,数据. 其实搜索的对象从类型上来说,应该是点.线.面都支持的,但是在实际的操作过程中,不论是百度还是我自己做的时候,都会将所有

闲聊javascript继承和原型

javascript继承已经是被说烂的话题了,我就随便聊一点~ 一.javascript的复制继承 javascript的继承有复制继承和原型继承,基于复制继承用的不太多,而且无法通过instanceof的验证 //拷贝继承,prototype.js的extend=> function extend(destination,source){ for(var property in source) destination[property]=source[properyt]; return des

javascript继承的三种方法

javascript并不是纯粹的面向对象的语言,因此也没有明确的继承方式,但可以通过一些方式来模拟继承.本文总结常见的javascript继承模拟方式 1,对象继承 //父类 function Person(name,age){ this.name = name; this.age = age; }; Person.prototype.height = "170cm"; //子类 function Boy(){ this.speak = function(){ alert("

javascript继承

原型链继承 1 <script> 2 function Parent(){ 3 this.name = 'mike'; 4 } 5 6 function Child(){ 7 this.age = 12; 8 } 9 Child.prototype = new Parent();//Child继承Parent,通过原型,形成链条 10 11 var test = new Child(); 12 alert(test.age); 13 alert(test.name);//得到被继承的属性 14

javascript继承—prototype属性介绍(2)

js里每一个function都有一个prototype属性,而每一个实例都有constructor属性,并且每一个function的prototype都有一个constructor属性,这个属性会指向自身.这会形成一个非常有意思的链式结构.举例如下: function Person(){ this.name =12; } console.log(Person.prototype); console.log(Person.prototype.constructor);//输出Person,指向自身

一种基于ES5的JavaScript继承

关于JavaScript继承,方式很多,包括compile-to-javascript的语言TypeScript, CoffeeScript以及网站MDN, GitHub, Modernizr各种polyfill都给出了稳妥的实现方案. 从ES5的角度看,这其中一些方案在功能上OK,但在语义上却不尽如人意. 本人从这些方案中采取一些比较潮的思路,整理出一份方案,可实现与原生DOM类继承的风格一致,达到功能和语义兼得的效果(当然,就别再老想着99后ES3了). 如果你的WebApp是基于ES5运行

ArcGIS for JavaScript 3.9 本机IIS部署

arcgis 官方网站经常会打不开,天朝人民都懂得!因为将arcgis for javascript 配置到本机访问 首先esri中国下载最新版3.9的API: http://support.esrichina-bj.cn/2011/0223/960.html 下载到本机后 将压缩包解压 复制这个arcgis_js_v39_api/arcgis_js_api到iis的根目录(当然你可以复制到你的项目所在的目录下). 即:C:\Inetpub\wwwroot\目录下 172.16.5.238 为我