前言
开始实现之前一直觉得geoserver发布的应该用自带的接口(GetCapabitities,GetMap,GetFeatureInfo),搞了很久发现不行,慢慢就注意到cesium自带的boxinfo这个东西,他又是怎么拿到的呢?实则去看了下还是没看懂!话不多说,上代码。
//就不解释每句啥意思了,都是每个小功能组合起来的,不懂就挨着挨着打印输出,复制粘贴基本能直接用。
_this.handler = new Cesium.ScreenSpaceEventHandler(
_this.viewer.scene.canvas
);
_this.handler.setInputAction(function (movement) {
const ray = _this.viewer.camera.getPickRay(movement.position);
const cartesian = _this.viewer.scene.globe.pick(
ray,
_this.viewer.scene
);
if (cartesian) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
if (cartographic) {
var xy = new Cesium.Cartesian2();
var alti = _this.viewer.camera.positionCartographic.height;
var level = _this.getLevel(alti);
//下面XXX均为模型对象
if (XXX.ready) {
xy = XXX.tilingScheme.positionToTileXY(
cartographic,
level,
xy
);
var promise = XXX.pickFeatures(
xy.x,
xy.y,
level,
cartographic.longitude,
cartographic.latitude
);
Cesium.when(promise, function (layerInfo) {
//查询结果展示
_this.dateTwo = layerInfo[0].data.properties;
console.log(_this.dateTwo, "_this.dateTwo");
_this.flags = true; //打开弹窗
});
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);