需求:将天地地图底图切换为WMTS瓦片底图素材:arcgisserverwmtsmapserverservicearcgisforjs4.X第一次操作:计划思路:考虑是wmts服务,先用BaseTileLayersspatialReference选择4490exportconsttdtlayer=async()=>{letBaseTileLayer=awaitarcgisPackage.BaseTileLayer;让Request=awaitarcgisPackage.Request;letTDT=awaitBaseTileLayer.createSubclass({urlTemplate:{null,},spatialReference:config.centerPoint.spatialReference,title:"天图地图",getTileUrl:function(level,row,col){leturl="https://192.168.***.***:6443/arcgis/rest/services/******/ImageBaseMap/MapServer"+col+"&y="+row+"&l="+level;returnurl;},fetchTile:function(level,row,col){leturl=this.getTileUrl(level,row,col);returnRequest(url,{responseType:"image",}).then((response)=>{让image=response.data;设width=this.tileInfo。尺寸[0];让height=this.tileInfo.size[0];让canvas=document.createElement("canvas");让上下文=canvas.getContext("2d");canvas.width=宽度;canvas.height=高度;context.drawImage(图像,0,0,宽度,高度);返回画布;});},});letlayer=awaitnewTDT();返回层;};结果:失败,总是得到3857投影第二个操作的概念方案:使用常用的WebTileLayerexportconsttdtJWDShiLianglayer=async()=>{letTileInfo=awaitarcgisPackage.TileInfo;让WebTileLayer=awaitarcgisPackage.WebTileLayer;vartileInfo=newTileInfo({dpi:90.71427//分辨率,即像素行数:256,列数:256,压缩质量:0,//压缩像素值origin:{x:-180,y:90},spatialReference:{wkid:4490},lods:[//定义切片方案的详细级别数组{level:2,levelValue:2,resolution:0.3515625,scale:147748796.52937502},{level:3,levelValue:3,resolution:0.17578125,比例尺:73874398.264687508,级别:{级:73874398.264687508}:4,分辨率:0.087890625,比例:36937199.13234343754},分辨率:0.02197265625,比例:9234299.7830859385},{级别:7,levelValue:7,分辨率:0.010986328125,比例:4617149.8915429693},{level:8,levelValue:8,resolution:0.0054931640625,scale:2308574.9457714846},{level:9,levelValue:9,resolution:0.00274658203125,scale:1154287.4728857423},{level:10,levelValue1:020513,resolution:577143.73644287116},{级别:11,LevelValue:11,分辨率:0.0006866455078125,刻度:288571.86822143558}:0.000171661376953125,比例尺:72142.9670555358895},{级别:14,LevelValue:14,分辨率:8.5830684765625E-005,刻度:降低:safor:safor:safor:safor:sative:36071.48352767947}级别18035.741763839724},{级别:16,级别值:16,分辨率:2.1457672119140625e-005,比例:9017.8708819198619},{级别:17,级别值:17,分辨率:1.07288比例58:540359354409599309},{level:18,levelValue:18,resolution:5.3644180297851563e-006,scale:2254.4677204799655},{level:19,levelValue:19,resolution:2.68220901489257815e-006,scale:1127.23386023998275},{level:20,levelValue:20,分辨率:1.341104507446289075e-006,规模:563.616930119991375}]});vartiledLayer=newWebTileLayer('https://192.168.***.***:6443/arcgis/rest/services/*******/ImageBaseMap/MapServer?T=vec_c&X={col}&Y={row}&L={level}',{tileInfo:tileInfo,spatialReference:{wkid:4490},});returntiledLayer}Result:Failed,原因是投影坐标系不能改变。第三次操作:构思方案:选择MapImageLayer结果:成功,但是性能很差,需要加载一次,丢弃“3rd.9th”操作:构思方案:选择WMTSLayer。如果是arcgis发的服务,一定要记得在url后面加上WMTS。这个官方文档没有提,很可怜!!!!!!!exportconstTestCustomWMTS=async()=>{//wmtslayerconstWMTSLayer=awaitarcgisPackage.WMTSLayer;letwmtsLayers=newWMTSLayer({url:"https://192.168.***.***:6443/arcgis/rest/services/*********/ImageBaseMap/MapServer/WMTS",//服务的URL});returnwmtsLayers}结果:成功,但是无法定位,观察图层对象,发现其投影坐标系为4326,估计大体是这个原因。于是我观察了api文档,发现wmtslayer没有SpatialReference属性,于是放弃。第四种操作构想方案:选择TileLayer,主要是考虑到wmts服务是arcgisserver发布的,所以试试看。exportconstTestCustomWMTS=async()=>{让TileLayer=awaitarcgisPackage.TileLayer;vartiledLayer=newTileLayer({url:'https://192.168.***.***:6443/arcgis/rest/services/*****/ImageBaseMap/MapServer',});返回tiledLayer}结果:成功
