4.11API在三维加载wkid4490天地图

1
分享 2019-05-28
前情提要:
1.如果使用的4.xAPI版本是<=4.7,友情链接:https://github.com/swaggyPYang/esridemo/tree/master/tianditu4.X
 
2.在4.11API可以只通过WebTileLayer在MapView下可以在不偏移的情况下加载4490天地图,用写tileInfo的方式实现。友情链接:https://www.cnblogs.com/gistrd/p/9897363.html
 
正文:
如果用前情提要2的方式,将webtilelayer放在SceneView下,控制台就会出现切片方案不符合场景视图要求的报错。而且地图不会加出来。追根溯源,是天地图开头的第一级的level为1。
Mapview加天地图时.jpg

而场景图层坐标系要求为:
场景图层坐标系要求.png

上面写了。全球场景要求缓存地图为ArcGIS Online/Google Maps(Web Mercator)切片方案 或 WGS84_Geographic_Coordinate_System_V2切片方案。
tileayer区别v2.jpg

见附件:WGS84_Geographic_Coordinate_System_V2.zip
由上图可以看到,切片方案应该从第0级开始才能加到三维全球场景里。
为了实现让从level1开始的天地图既能够可视化,又能够加到全球场景里。我们提出两种方式解决这个问题。
方式1:重写BasetileLayer类
tileinfo写V2的方案。创建天地图类。参考示例使用自定义缓存图层:https://developers.arcgis.com/ ... layer
创建天地图类.jpg

只需注意fetchTile方法重写时,在var url = this.getTileUrl(level+1, row, col);时,level+1.

方式2:注意levelValue和level使用
简单实现代码:
三维天地图简单版.jpg

源码https://jsbin.com/woxeyizovo/edit?html,output

1 个评论

补充一下,这套代码目前仅适用于4.11. 如果在4.12或4.13使用,可能会出现切片顺序混乱的情况。
这是因为fetchTile()中的abort signal处理不正确。 最好的方法是将其传递给esriRequest()。
如果在4.11之后的版本使用此代码修改fetchTile下面的内容。主要添加了options并在Request的时候指定 allowImageDataAccess: true,signal: options.signal

fetchTile: function(level, row, col, options) {

var url = this.getTileUrl(level, row, col);

return esriRequest(url, {

responseType: "image",

allowImageDataAccess: true,

signal: options.signal

})

.then(function(response) {

...

要回复文章请先登录注册