首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WMS :WMS的拾取实体和检索信息

WMS :WMS的拾取实体和检索信息
EN

Stack Overflow用户
提问于 2015-12-11 17:34:12
回答 1查看 4.7K关注 0票数 4

我已经开发了一个建筑物的3D查看器。我现在要添加的是对建筑物实体下面的WMS (Web地图服务)内容的选择。

基本上,我希望能够在用户左键单击的位置选择建筑物。建筑物的颜色应该改变(这是可行的)。我想要检索用户被点击的位置的Web地图服务的信息。

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

代码语言:javascript
复制
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“保持未定义,而我希望它返回一个数组。

EN

回答 1

Stack Overflow用户

发布于 2019-06-18 16:47:58

对于WMS,您需要使用wms GetFeatureInfo功能:

代码语言:javascript
复制
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);
        }
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34220203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档