Cesium1.95地图使用UrlTemplateImageryProvider加载supermap rest服务报错问题

Cesium1.95地图使用UrlTemplateImageryProvider加载supermap rest服务报错问题

问题描述

参考这篇博客加载supermap的 rest服务
使用Cesium1.65时能正常加载,升级为1.95后,获取图片的请求报400 Bad Request错误

问题分析

查看错误请求发现url中传递的参数 origin={x:,y:} 包含了特殊字符 “{}”
将请求url 用encode方法编码,依然存在问题,应该是Cesium1.95地图强制将url中的{}解析为模板
在这里插入图片描述

解决方案

 var imgUrl = url + "/tileImage.png?transparent=true&cacheEnabled=true&width=256&height=256&x={x}&y={y}"+
 "&scale={scale}&redirect=false&overlapDisplayed=false&origin={'x':" + originx + ",'y':" + originy + "}"

将url中的"&origin={‘x’:" + originx + “,‘y’:” + originy + "}"部分用customTag替换

var imgUrl = url + "/tileImage.png?transparent=true&cacheEnabled=true&width=256&height=256&x={x}&y={y}"+
"&scale={scale}&redirect=false&overlapDisplayed=false&origin={origin}"

layerProvider = new Cesium.UrlTemplateImageryProvider({
                        url: imgUrl,
                        customTags: {
                            origin: function () {
                                return `{'x':${originx},'y':${originy}}`;
                            }
                        },
                        zIndex: 2
                    });
Cesium中,使用`UrlTemplateImagerProvider`加载瓦片地图时,确实需要考虑层级设置以避免原地图未覆盖的问题。这里是一个基本步骤: 1. **创建UrlTemplateImagerProvider**: 首先,你需要创建一个新的`UrlTemplateImagerProvider`实例,并指定瓦片URL模板。例如: ```javascript const urlTemplate = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; const imageryProvider = new Cesium.UrlTemplateImagerProvider({ url : urlTemplate, credit : 'OpenStreetMap', }); ``` 2. **设置层级** (Z-index): 当有多个图层叠加时,你可以设置每个图层的`renderOrder`属性。将新图层设为更高的`renderOrder`值,使其位于原地图之上。例如: ```javascript imageryProvider.setRenderOrder(Cesium.ImageryLayer.renderOrder.ABOVE_BASE_MAP); ``` 这样当新图层的瓦片数据到来时,它们会覆盖原有地图的部分区域。 3. **防止未覆盖问题**: 如果新图层覆盖了部分旧图层,那可能是由于瓦片数据更新导致的。你需要确保你的瓦片服务器策略正确,比如定期刷新或只在地图发生变化时更新特定区域的瓦片。 4. **注意缓存**: Cesium会缓存瓦片,如果缓存已满,可能会发生一些瓦片未加载的情况。你可以调整`ImageServiceImagingOptions`的`maxZoomPixelSize`属性来控制缓存大小。 5. **错误处理和用户体验**: 提供良好的错误处理机制,当瓦片加载失败时,展示默认地图或提供其他反馈给用户。 记住,如果你想要完全替换原有的地图,而不是添加新的图层,可以考虑使用`Scene.primitives.remove`方法移除原始图层后再添加新的`UrlTemplateImagerProvider`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值