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);
}
打印效果图