Cesium:拾取实体并检索 WMS 信息

2024-04-21

我开发了一个建筑物的 3D 查看器。我现在尝试添加的是选择建筑实体下方的 WMS(网络地图服务)内容。

基本上,我希望能够选择用户左键单击位置的建筑物。建筑物的颜色应该改变(有效)。我想检索用户点击位置的网络地图服务信息。

这是我到目前为止编写的代码:

var pickColor = Cesium.Color.CYAN.withAlpha(0.7);
var selectedEntity = new Map();

handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click) {
    var pickedObject = viewer.scene.pick(click.position);
    if (Cesium.defined(pickedObject)) {
        var entityId = pickedObject.id._id;
        var oldColor = buildingMap.get(entityId).polygon.material.color;
        buildingMap.get(entityId).polygon.material.color = pickColor;
        selectedEntity.set(entityId, oldColor);

        var currentLayer = viewer.scene.imageryLayers.get(1);
        if (typeof currentLayer !== 'undefined') {
            var info = currentLayer._imageryProvider._tileProvider.getTileCredits(click.position.x, click.position.y, 0);
        }
    }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

然而,我的变量“info”保持未定义,而我希望它返回一个数组。


对于 WMS,您需要使用 wmsGetFeatureInfo能力:

var pickRay = viewer.camera.getPickRay(windowPosition);
var featuresPromise = viewer.imageryLayers.pickImageryLayerFeatures(pickRay, viewer.scene);
if (!Cesium.defined(featuresPromise)) {
    console.log('No features picked.');
} else {
    Cesium.when(featuresPromise, function(features) {
        // This function is called asynchronously when the list if picked features is available.
        console.log('Number of features: ' + features.length);
        if (features.length > 0) {
            console.log('First feature name: ' + features[0].name);
        }
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cesium:拾取实体并检索 WMS 信息 的相关文章

随机推荐