1 arcgis加载天地图和wmts服务

arcgis for js加载天地图的例子网上有很多,这里先不写了,后期有空再贴代码,这里主要分析下WMTS服务为什么不显示,怎么解决。

条件:这里的WMTS服务是OGC标准的,需要使用WMTSLayer类来实例化图层。

问题:天地图和自己的WMTS只能显示一个,即先加载哪个,就只显示哪个,而另外一个图层不会显示。 
原因:天地图服务和自己的WMTS服务的切片矩阵集不同导致。下面多点废话详细分析一下,因为我对各服务了解的很浅,如果有错误请批评指正。 
  WMTS服务是切片服务,相比WMS而言,牺牲定制地图的灵活性来提升性能,这对前端展示很有用,因为用户缩放或移动地图后,很快就能将切片的影像渲染出来。引用一段百度百科的文字来说明WMTS:

WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案。WMTS弥补了WMS不能提供分块地图的不足。WMS针对提供可定制地图的服务,是一个动态数据或用户定制地图(需结合SLD标准)的理想解决办法。WMTS牺牲了提供定制地图的灵活性,代之以通过提供静态数据(基础地图)来增强伸缩性,这些静态数据的范围框和比例尺被限定在各个图块内。这些固定的图块集使得对WMTS服务的实现可以使用一个仅简单返回已有文件的Web服务器即可,同时使得可以利用一些标准的诸如分布式缓存的网络机制实现伸缩性。
  • 1
  • 2

  而当在arcgis for js中加载esri提供的底图或天地图底图时,底图与我们自己的WMTS服务缩放级别与每块切片大小不一致。比如底图缩放2及时,将底图切为4*2的切片,比例分母是A,而此时我们的WMTS2及时比例分母不与A相等,这就导致两个地图服务冲突,而无法同时显示两个地图服务。所以从此方面下手解决这个问题。 
解决:将天地图的WMTS服务http://t0.tianditu.com/vec_c/wmts,和自己的WMTS服务加载至ArcMap中,在右侧catalog目录中分别双击两个服务,查看服务属性如下图 
 
天地图wmts服务

 
自己的WMTS服务

  将这两个服务的切片矩阵集合分对照更改到 esri.layers.TileInfooptions里的lods属性中即可。注意清除一下浏览器缓存再刷新页面,否则很可能还展示更改前的页面状态。

代码 
下面贴一下自定义OGC标准的WMTS服务在arcgis4js中的加载:

var tileInfo = new esri.layers.TileInfo({
"dpi": 90.71428571428571, //必须,否则图错
"rows": 256,
"cols": 256,
"compressionQuality": 0,
"origin": {
"x": -180,
"y": 90
},
"spatialReference": {
"wkid": 4326
},
"lods": [
{ "level": 1, "resolution": 0.703125, "scale": 295829355.454566 },
{ "level": 2, "resolution": 0.3515625, "scale": 147914677.727283 },
{ "level": 3, "resolution": 0.17578125, "scale": 73957338.863641 },
{ "level": 4, "resolution": 0.087890625, "scale": 36978669.431821 },
{ "level": 5, "resolution": 0.0439453125, "scale": 18489334.715910 },
{ "level": 6, "resolution": 0.02197265625, "scale": 9244667.357955 },
{ "level": 7, "resolution": 0.010986328125, "scale": 4622333.678978 },
{ "level": 8, "resolution": 0.0054931640625, "scale": 2311166.839489 },
{ "level": 9, "resolution": 0.00274658203125, "scale": 1155583.419744 },
{ "level": 10, "resolution": 0.001373291015625, "scale": 577791.709872 },
{ "level": 11, "resolution": 0.0006866455078125, "scale": 288895.854936 },
{ "level": 12, "resolution": 0.00034332275390625, "scale": 144447.927468 },
{ "level": 13, "resolution": 0.000171661376953125, "scale": 72223.963734 },
{ "level": 14, "resolution": 8.58306884765625e-005, "scale": 36111.981867 },
{ "level": 15, "resolution": 4.291534423828125e-005, "scale": 18055.990934 },
{ "level": 16, "resolution": 2.1457672119140625e-005, "scale": 9027.995467 },
{ "level": 17, "resolution": 1.0728836059570313e-005, "scale": 4513.997733 },
{ "level": 18, "resolution": 5.3644180297851563e-006, "scale": 2256.998867 },
{ "level": 19, "resolution": 0.000002682209014892578, "scale": 1128.499433 }
]
});
var tileExtent = new Extent(-180, -90, 180, 90, new SpatialReference({
wkid: 4326
}));
var layerInfo = new WMTSLayerInfo({
tileInfo: tileInfo,
fullExtent: tileExtent,
initialExtent: tileExtent,
identifier: "name",
tileMatrixSet: "EPSG:4326",
format: "image/png",
style: "_null"
});
var resourceInfo = {
version: "1.0.0",
layerInfos: [layerInfo],
copyright: "open layer"
};
var options = {
serviceMode: "KVP",
resourceInfo: resourceInfo,
layerInfo: layerInfo
};
wmtsLayer = new WMTSLayer(wmtsUrl, options);
map.addLayer(wmtsLayer);

注意 
如果lods属性设置不正确,还会导致底图与自己的wmts服务坐标错乱的问题。如果发现坐标系设置相同但同一个坐标点无法在两个服务中重合,按照上述解决方式更改lods属性即可。

2 加载带有密钥的WMTS

初始化WMTSLayer时,在第二个参数也就是options中配置键customParameters的属性即可。

demo

var options = {
...
customParameters:{
"key1":"value1",
"key2":"value2"
}
}
var wmtsLayer = new WMTSLayer(wmtsUrl, options);

(转载)arcgis for js - 解决加载天地图和WMTS服务,WMTS服务不显示的问题,以及wmts服务密钥。的更多相关文章

  1. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  2. ArcGIS API for Javascript 加载天地图(经纬度投影)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. ArcGIS API for Javascript 加载天地图(墨卡托投影)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. arcgis api for javascipt 加载天地图、百度地图

    写在前面的话: 1.百度地图是自己定义的坐标系统,wkid=102100.百度地图数据是加密的产物.下文将附上百度坐标与WGS84,谷歌等坐标系统转换方法(地理-地理),此方法并未亲测,据说准 2.百 ...

  5. Arcgis瓦片--js客户端加载

    接上篇博客,下载好arcgis格式的瓦片数据以后,需要用js客户端在前端加载出来.这里介绍两种方案: 1.使用超图iServer将瓦片发布成rest地图服务,或者arcgis地图服务,客户端直接加载 ...

  6. (转)Arcgis for js加载天地图

    http://blog.csdn.net/gisshixisheng/article/details/44494715 综述:本节讲述的是用Arcgis for js加载天地图的切片资源. 天地图的切 ...

  7. arcgis api 4.x for js 结合 react 入门开发系列react全家桶实现加载天地图(附源码下载)

    基于两篇react+arcgis的文章介绍,相信大家也能体会两者的开发区别了.在“初探篇”中作者也讲述了自己的选择,故废话不多说,本篇带大家体验在@arcgis/webpack-plugin环境下,使 ...

  8. 【ArcGis for javascript从零开始】之一 ArcGis加载天地图

    最近做项目需要用到ArcGis来进行数据展示和数据分析.以前从来没有接触过与Gis有关的东西,一切需要从头开始学.没有时间从头系统地学习了,只能用到哪个学习哪里了,本系列只是对学习的路径进行记录.Ar ...

  9. ArcGis Javascript API (V3.6)加载天地图

    Arcgis的Javascript api开发很活跃,不知不觉都发布了3.6的版本了.该版本基于dojo 1.8.3开发的. 从dojo 1.8开始,AMD机制用得越来越多了,而且require([& ...

随机推荐

  1. 8php字符串的方法

    <?php/** * Created by PhpStorm. * User: DY040 * Date: 2017/9/8 * Time: 16:46 *//*php也有转义字符/*///ec ...

  2. java——线程的wait()和notify()

    这是一个关于生产者和消费者的线程通信的例子: package thread_test; public class PCThread { public static void main(String[] ...

  3. Vue.js-----轻量高效的MVVM框架(七、表单控件绑定)

    话不多说,先上完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  4. VUE验证器哪家强? VeeValidate absolutely!

    VUE验证器哪家强? VeeValidate absolutely! vee-validate表单验证用法 github地址:https://github.com/baianat/vee-valida ...

  5. python_文件 处理

    一.字符编码 内存固定使用unicode编码 数据最先产生于内存中,是unicode格式,要想传输需要转成bytes格式 # unicode -------> enconde( u t f - ...

  6. web service, wcf, wcf rest, web api之间的区别

    在.NET Framework中,有很多种技术可以创建基于http协议的服务,譬如说web service, wcf,wcf rest和web api等等.网上有很多的文章教我们如何开发.使用这几种技 ...

  7. zuul路由网关

    zuul作为网关组件,主要用来管理api请求接口(统一对外暴露,负载均衡),身份认证,流量监控等.它是通过servlet来实现的,核心是一系列过滤器,可以在请求的发起跟相应返回阶段进行一系列的处理. ...

  8. Ubuntu14.04-PXE搭建

    什么是PXE? PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从 ...

  9. WebGL 踩坑系列-2

    需求:绘制斑点在球面上走过的路径 思路:要绘制斑点在球面上走过的路径,首先要记录上一时刻和当前时刻该斑点所在球面的位置,并且实时更新当前时刻的斑点位置和上一时刻的斑点位置. 为了方便,上一时刻斑点所在 ...

  10. Excel数据导入数据库

    maven依赖 <!--excel相关依赖--> <dependency> <groupId>org.apache.poi</groupId> < ...