内容简介:最近需要加载 ArcGIS 瓦片图层,运行官网加载 ArcGIS 瓦片图层的 demo 是没有问题的。如果把 ArcGIS 瓦片图层 URL 换成是自已发布的 ArcGIS 地图服务,发现加载不出来,而服务本身提供的 ArcGIS API 却可以加载出来。到底是哪里的问题呢,于是便试着写了个自定义扩展方法 ArcGISTileLayer 用来加载 ArcGIS 瓦片图层。1、分析 ArcGIS API 的 URL打开浏览器的 Network
最近需要加载 ArcGIS 瓦片图层,运行官网加载 ArcGIS 瓦片图层的 demo 是没有问题的。如果把 ArcGIS 瓦片图层 URL 换成是自已发布的 ArcGIS 地图服务,发现加载不出来,而服务本身提供的 ArcGIS API 却可以加载出来。到底是哪里的问题呢,于是便试着写了个自定义扩展方法 ArcGISTileLayer 用来加载 ArcGIS 瓦片图层。
1、分析 ArcGIS API 的 URL
打开浏览器的 Network
发现 URL 参数是由 dpi 、bboxSR、imageSR、size、transparent、format、f 、bbox 几个参数构成。多分析几条 URL 数据会发现,URL 参数中 dpi 、bboxSR、imageSR、size、transparent、format、f 这几个参数是固定不变的。只有 bbox 在变动。那么,如果我们手动计算 bbox 并拼接参数,是不是就可以实现加载 ArcGIS 瓦片图层了。
2、编写第一个版本 ,核心代码如下 (完整代码 )
var defaultArcParams = {
dpi: '90',
bboxSR: '4326',
imageSR: '4326',
size: '512,512',
transparent: true,
format: 'png32',
f:'image'
};
ArcGISTileLayer.prototype.getTileUrl = function getTileUrl(x, y, z) {
var res = this.getSpatialReference().getResolution(z),
tileConfig = this._getTileConfig(),
tileExtent = tileConfig.getTilePrjExtent(x, y, res);
var max = tileExtent.getMax(),
min = tileExtent.getMin();
var bbox = [min.x, min.y, max.x, max.y].join(',');
var url = _TileLayer.prototype.getTileUrl.call(this, x, y, z);
return url + getParamString(defaultArcParams, url, false) + '&bbox=' + bbox;
};
复制代码
把官网的 demo 改造下,发现果然可以顺利加载 ArcGIS 瓦片图层,心中一阵高兴,原来加载 ArcGIS 瓦片图层这么简单。马上把自己发布的 ArcGIS 地图服务试下,发现加载不了。重新分析下 ArcGIS API 的 URL,最终发现只有 dpi 、transparent、format、f 这四个参数是不变,其他的参数 bboxSR ( EPSG )、imageSR( EPSG )、size ( 切片大小 )、bbox( tileExtent ) 都是需要根据服务动态计算的。
3、完善版本
var defaultArcParams = {
dpi: '90',
transparent: true,
format: 'png32',
f:'image'
};
ArcGISTileLayer.prototype.getTileUrl = function getTileUrl(x, y, z) {
var res = this.getSpatialReference().getResolution(z),
tileConfig = this._getTileConfig(),
tileExtent = tileConfig.getTilePrjExtent(x, y, res);
var max = tileExtent.getMax(),
min = tileExtent.getMin();
var bbox = [min.x, min.y, max.x, max.y].join(',');
var pro = this.getSpatialReference().getProjection()
var srid = pro.code.split(':').pop();
this.arcParams['bboxSR'] = srid;
this.arcParams['imageSR'] = srid;
var tileSize = this.getTileSize();
this.arcParams['size'] = tileSize.width + ',' + tileSize.height;
var url = _TileLayer.prototype.getTileUrl.call(this, x, y, z);
return url + getParamString(this.arcParams, url, false) + '&bbox=' + bbox;
};
复制代码
测试下自己发布的 ArcGIS 地图服务,成功加载。
以上所述就是小编给大家介绍的《maptalks 如何加载 ArcGIS 瓦片图层》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Golang 编写的瓦片地图服务
- 介绍同步加载、异步加载、延迟加载[原创]
- .net加载失败的程序集重新加载
- 虚拟机类加载机制:类加载时机
- 探秘类加载器和类加载机制
- hibernate中加载策略+批加载+懒加载异常【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Unix/Linux编程实践教程
Bruce Molay、杨宗源、黄海涛 / 杨宗源、黄海涛 / 清华大学出版社 / 2004-10-1 / 56.00元
操作系统是计算机最重要的系统软件。Unix操作系统历经了几十年,至今仍是主流的操作系统。本书通过解释Unix的工作原理,循序渐进地讲解实现Unix中系统命令的方法,让读者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。书中采用启发式、举一反三、图示讲解等多种方法讲授,语言生动、结构合理、易于理解。每一章后均附有大量的习题和编程练习,以供参考。 本书适合作为高等院校计算机及......一起来看看 《Unix/Linux编程实践教程》 这本书的介绍吧!