ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”
这种方式可以提高出图速度于效果,算法见http://blog.newnaw.com/?p=633,我用ArcGIS for JavaScript API来实现。具体代码为:
function initDynamicMapLayer() {
dojo.declare("ogc.DynamicMapLayer", esri.layers.TiledMapServiceLayer, { // create DynamicMapLayer by extending esri.layers.TiledMapServiceLayer
datetime: "",
constructor: function(datetime) {
this.datetime = datetime;
this.spatialReference = new esri.SpatialReference({
wkid: 4326
});
this.initialExtent = new esri.geometry.Extent(-180, -90, 180, 90, this.spatialReference);
this.fullExtent = new esri.geometry.Extent(-180, -90, 180, 90, this.spatialReference);
//
this.tileInfo = new esri.layers.TileInfo({
"dpi": "90.71428571428571",
"format": "image/png",
"compressionQuality": 0,
"spatialReference": {
"wkid": "4326"
},
"rows": 256,
"cols": 256,
"origin": {
"x": -180,
"y": 90
},
// Scales in DPI 96
"lods" : [
{"level" : 1, "resolution" : 0.7031249999891485, "scale" : 2.958293554545656E8},
{"level" : 2, "resolution" : 0.35156249999999994, "scale" : 1.479146777272828E8},
{"level" : 3, "resolution" : 0.17578124999999997, "scale" : 7.39573388636414E7},
{"level" : 4, "resolution" : 0.08789062500000014, "scale" : 3.69786694318207E7},
{"level" : 5, "resolution" : 0.04394531250000007, "scale" : 1.848933471591035E7},
{"level" : 6, "resolution" : 0.021972656250000007, "scale" : 9244667.357955175},
{"level" : 7, "resolution" : 0.01098632812500002, "scale" : 4622333.678977588},
{"level" : 8, "resolution" : 0.00549316406250001, "scale" : 2311166.839488794},
{"level" : 9, "resolution" : 0.0027465820312500017, "scale" : 1155583.419744397},
{"level" : 10, "resolution" : 0.0013732910156250009, "scale" : 577791.7098721985},
{"level" : 11, "resolution" : 0.000686645507812499, "scale" : 288895.85493609926},
{"level" : 12, "resolution" : 0.0003433227539062495, "scale" : 144447.92746804963},
{"level" : 13, "resolution" : 0.00017166137695312503, "scale" : 72223.96373402482},
{"level" : 14, "resolution" : 0.00008583068847656251, "scale" : 36111.98186701241},
{"level" : 15, "resolution" : 0.000042915344238281406, "scale" : 18055.990933506204},
{"level" : 16, "resolution" : 0.000021457672119140645, "scale" : 9027.995466753102},
{"level" : 17, "resolution" : 0.000010728836059570307, "scale" : 4513.997733376551},
{"level" : 18, "resolution" : 0.000005364418029785169, "scale" : 2256.998866688275},
{"level" : 19, "resolution" : 2.68220901485e-6, "scale": 1128.499433344138},
{"level" : 20, "resolution" : 1.341104507425e-6, "scale": 564.2497166720688}
]
});
this.loaded = true;
this.onLoad(this);
},
getTileUrl: function(level, row, col) {
var resolution = 0;
for (var i = 0; i < this.tileInfo.lods.length; i++){
var lod = this.tileInfo.lods[i];
if (lod.level == level){
resolution = lod.resolution;
}
}
var xmin, ymin, xmax, ymax;
xmin = -180 + resolution * 256 * col;
ymin = 90 - resolution * 256 * (row + 1);
xmax = -180 + resolution * 256 * (col + 1);
ymax = 90 - resolution * 256 * row;
var bbox=xmin+"%2C"+ymin+"%2C"+xmax+"%2C"+ymax;
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";
}
});
}
以上基于天地图底图,效果如下:

效果杠杠的,云图播放一点都不卡了。
ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”的更多相关文章
- ArcGIS Server 10中的切图/缓存机制深入【转】
http://blog.newnaw.com/?p=789 两年前我写过一篇关于ArcGIS地图切图/缓存原理的文章,<ArcGIS Server的切图原理深入>,里面以tiling sc ...
- 关于JavaScript继承的那些事
在JavaScript中,对象的创建可以脱离类型(class free),通过字面量的方式可以很方便的创建出自定义对象. 另外,JavaScript中拥有原型这个强大的概念,当对象进行属性查找的时候, ...
- Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式
原文:Arcgis for Javascript API下类似于百度搜索A.B.C.D marker的实现方式 多说无益,首先贴两张图让大家看看具体的效果: 图1.百度地图搜索结果 图2.Arcgis ...
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...
- ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...
- javascript继承的三种模式
javascript继承一般有三种模式:组合继承,原型式继承和寄生式继承: 1组合继承:javascript最为广泛的继承方式通过原型链实现对原型属性和方法的继承,通过构造函数实现对实例属性的继承,同 ...
- javascript继承机制的设计思想(ryf)
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- 【读书笔记】javascript 继承
在JavaScript中继承不像C#那么直接,C#中子类继承父类之后马上获得了父类的属性和方法,但JavaScript需要分步进行. 让Brid 继承 Animal,并扩展自己fly的方法. func ...
- 图解JavaScript 继承
JavaScript作为一个面向对象语言,可以实现继承是必不可少的,但是由于本身并没有类的概念(不知道这样说是否严谨,但在js中一切都类皆是对象模拟)所以在JavaScript中的继承也区别于其他的面 ...
随机推荐
- BeautifulSoap库入门
BeautifulSoup类的基本元素 基本元素 说明 Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾 Name 标签的名字,<p>-< ...
- 【BZOJ2732】【HNOI2012】射箭 二分+半平面交
此题重点在卡精度!!! 本地已经下载数据测试并通过了,然而$B$站上还是$WA$的,可能是$CPU$对于$long\ double$ 的资瓷不一样. 此题答案显然是可以二分出来的,设当前要监测是否能射 ...
- h5移动端聊天室|仿微信界面聊天室|h5多人聊天室
今年的FIFA世界杯甚是精彩,最近兴致高涨就利用HTML5开发了一个手机端仿微信界面聊天室,该h5聊天室采用750px全新伸缩flex布局,以及使用rem响应式配合fontsize.js,页面弹窗则是 ...
- OkHttp3实现Cookies管理及持久化
转发自:http://www.codeceo.com/article/okhttp3-cookies-manage.html OKHttp3正式版刚发布了没几天,正好重构之前的代码,于是第一时间入坑了 ...
- Android之ListView的使用技巧
之前有总结过关于ListView的一些优化技巧,比如它的ConvertView的复用Recycler机制,使用ViewHolder来提高列表条目的findById的效率,以及宽高的设置确定值的好处,如 ...
- HUE配置文件hue.ini 的mapred_clusters模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- 问题记录 | VScode中使用IntelliJ的快捷键
问题记录 | VScode中使用IntelliJ的快捷键 主要想用ctrl+alt+l格式化Python代码 安装VScode的插件:IntelliJ IDEA Keybindings 安装方法: I ...
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...
- IOS bug之cannot be opened because the project file cannot be parsed
刚才用Cornerstone更新代码后,再次打开项目时,不能打开,提示cannot be opened because the project file cannot be parsed后来在网上查了 ...
- Mysql汉字乱码的解决
在安装Mysql时其实可能选择使用GBK来处理汉字,由于以前没使用,所以就按默认的英语处理.不过,也可以C:\Program Files\MySQL\MySQL Server 6.8安装路径下的my文 ...