cesium 获取WMTS瓦片的行(x)列(y)值(记录学习)

1.加载WMTS服务图层。

根据WMTS图层服务提供者提供图层Url加载图层。

// 这里是在类中的方法,viewer/imageryLayers/testProvider都是类中的属性
loadLayer(filter, isClear) {
    let wms_layer = {
        url: "your url"
    }
    const provider = new Cesium.WebMapServiceImageryProvider(wms_layer);
    const imageryLayer = new Cesium.ImageryLayer(provider);
    this.imageryLayers.push(imageryLayer);
    // 记录下来图层对象
    this.testProvider = provider;
    // 加载切片框,方便查看
    const tileCoordinatesImageryProvider = new Cesium.TileCoordinatesImageryProvider();
    this.viewer.imageryLayers.addImageryProvider(tileCoordinatesImageryProvider)
    this.viewer.imageryLayers.add(imageryLayer);
}

等待图层加载完成后,才可以获取瓦片的信息。也就是要等到provider.readyPromise这个异步任务状态改变之后才可以获取。由于我是写在类中的方法,异步调用。所以基本就不需要考虑了。假如如果没加载完成。this.testProvider中的tilingScheme是没有positionTileXY这个方法的。

getXY(e) {
    // e是点击事件的对象。大概结构是{position: {x: 111, y: 233}},x/y是点击位置的相对于容易的像素值
    // 获取当前图层的点击位置所在的瓦片
    let ray = this.viewer.camera.getPickRay(e.position);
    let cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene);
    let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    // 这里的9是设置了level。level大,瓦片划分的数量就越大
    let res = this.testProvider.tilingScheme.positionToTileXY(
        cartographic,
        9
    )
    console.log(res);
}

打印效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值