SuperMap iClient3D for Cesium 优化影像接边处黑线问题

作者:gsh

目录

一、前言

二、问题原因

三、去除接边处黑线代码

四、注意事项


一、前言

做了投影转换后的影像数据,在地图中显示正常,但在三维场景中会在影像边界处出现黑色填充,生成的瓦片(.sci或.sci3d)仍有黑边,导致在场景中叠加多幅影像交界处会有明显黑线,目前超图产品已在 SuperMap iClient3D for Cesium 增加接口来处理优化,一起看看如何处理的吧。

二、问题原因

影像数据投影转换后,会出现拉伸变形,超过数据有效边界的地方没有有效的像素数据填充,生成的瓦片加载在地图中表现为全透明,但三维场景中会在边界处出现黑色填充,导致多幅影像交界处有黑线,该问题为三维软件的通性问题,目前超图产品已在 SuperMap iClient3D for Cesium 增加接口来处理优化。

三、去除接边处黑线代码

发布服务后,SuperMap iClient3D for Cesium加载多幅影像交界处效果如下:

对影像进行设置:

imageryLayer.minTextureAlphaFilter = 0.99;

设置后:

四、注意事项

1.如果场景中多幅影像可以遍历影像数据来做批量设置:

var promise = scene.open('http://localhost:8090/iserver/services/3D-WorkSpace/rest/realspace');

Cesium.when(promise, function(layers) {
	var imageryLayers = viewer.imageryLayers
	for (var i = 1; i < imageryLayers.length; i++) {
		var imageryLayer = imageryLayers.get(i);
		imageryLayer.minTextureAlphaFilter = 0.99;
	}

})

2.如果场景中有矢量缓存(.sci或.sci3d),也是存在场景的 imageryLayers 中,会被同时过滤掉,建议统一命名标识出影像数据,比如本示例影像命名为“影像1”和“影像2”,根据影像name前两个字符为“影像”做判断:

var promise = scene.open('http://localhost:8090/iserver/services/3D-WorkSpace/rest/realspace');
Cesium.when(promise, function(layers) {
    var imageryLayers = viewer.imageryLayers
	for (var i = 1; i < imageryLayers.length; i++) {
		var imageryLayer = imageryLayers.get(i);
		var name = imageryLayer._imageryProvider.tablename;
		if (name.slice(2) !== '影像') {
			console.log("name11111", imageryLayer._imageryProvider.tablename);
			console.log("imageryLayers111", imageryLayer);
			imageryLayer.minTextureAlphaFilter = 0.99;
		}
	}
})

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值