首页 / 浏览问题 / WebGIS / 问题详情
layer.getAttributesById()获取属性
6EXP 2023年03月23日
需求:我想要在s3mLayer加载完成后立即通过layer.getAttributesById()来获取属性。 问题:我看属性是存在了indexedDB中,而indexedDB又没有监听数据的接口,看s3mLayer的文档有一个attributeDownloaded 的属性比较接近,但是这个也没法保证在回调中就能通过layer.getAttributesById()获取到属性。而通过setTimout来延迟一两秒可以获取到。

1个回答

您好,如果您想确保完全加载后再触发事件,可以考虑使用 S3MTilesLayer.allTilesLoaded事件来辅助,

该事件内的内容是在缓存瓦片块完全加载后才会触发一次,您可以使用测试下来了解他的特性和触发逻辑。

希望可以帮助到您。
10,758EXP 2023年03月24日

但是我的S3MTilesLayer的通过scene.open()的形式创建的,不能正确监听事件,代码如下:

const url = 'http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace';
viewer.scene.open(url).then(function (layers) {
  const layer = layers[0];
  layer.allTilesLoaded.addEventListener(function () {
    console.log('layer.allTilesLoaded'); // 这里是不会打印的。
  });
});

可以的

scene.layers.find把你的图层找出来就行,不要用回调的这个layes,回调这个layers修改操作不过去的

比如

                var tileset = scene.layers.find('Ground@CBD');
                console.log(tileset)
                tileset.allTilesLoaded.addEventListener(function() {
    if (tileset.tilesLoaded === tileset.tilesLoaded) {
        console.log('3D Tiles loaded!');
    }
});

可以,谢谢~~
...