首页 / 浏览问题 / WebGIS / 问题详情
绘制的时候label会遮挡绘制事件
239EXP 2025年11月14日
25版本的webgl
我在页面设置了一个label图标,这个图标有点大会导致绘制的时候被图标遮挡部分无法正常绘制,有没有什么优雅的解决方法?

1个回答

您好,

我测试了使用entity方式添加label,并无遮挡现象,绘制时可以正常穿过label背景点击后面的地形。您可在此官网示例中测试:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#drawHandler

添加label代码:

viewer.entities.add({
    name: 'TestLabel',
    position: new SuperMap3D.Cartesian3(-1217241.7712582082, 5328019.103361328, 3289429),
    billboard: {
        image: "./images/PrivateHouse.jpg",
        width: 300,
        height: 300,
        scaleByDistance: new SuperMap3D.NearFarScalar(1000, 1.0, 50000, 0.1),
        horizontalOrigin: SuperMap3D.HorizontalOrigin.CENTER,
        verticalOrigin: SuperMap3D.VerticalOrigin.CENTER
    }
})

如仍有问题,请提供添加您的添加label、绘制方法等关键代码截图,以及测试有问题的具体现象截图。

560EXP 2025年11月14日

 我观察到图标只要设置disableDepthTestDistance: Number.POSITIVE_INFINITY, 这个属性就会产生这个问题,您可以看一下。
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#entity_point

// 文字图标
            viewer.entities.add({
                name: "中央广播电视台",
                position: SuperMap3D.Cartesian3.fromDegrees(116.45737155619143, 39.914089474458265, 219.85780786201954),
                billboard: {
                    image: './images/EntityGeometry/billboardLable.png',
                    pixelOffset: new SuperMap3D.Cartesian2(60, -40), // 偏移
                    // 设置pixelOffset时,随着放大缩小会出现巨大偏移,这是由于像素固定值导致的,需要设置该属性,且应与scaleByDistance保持一致
                    pixelOffsetScaleByDistance: new SuperMap3D.NearFarScalar(2000, 1, 8000, 0), 
                    scaleByDistance: new SuperMap3D.NearFarScalar(2000, 1, 8000, 0),
                    disableDepthTestDistance: Number.POSITIVE_INFINITY,
                },
                label: {
                    text: '中央广播电视台',
                    font: 'normal 18px MicroSoft YaHei',
                    pixelOffset: new SuperMap3D.Cartesian2(85, -65), // 偏移
                    pixelOffsetScaleByDistance: new SuperMap3D.NearFarScalar(2000, 1, 8000, 0),
                    scaleByDistance: new SuperMap3D.NearFarScalar(2000, 1, 8000, 0),
                    disableDepthTestDistance: Number.POSITIVE_INFINITY,
                }
            })
            
            
           let handler = new SuperMap3D.DrawHandler(viewer,SuperMap3D.DrawMode.Polygon,SuperMap3D.ClampMode.S3mModel);
           handler.activate();

...