三维可视化场景数据信息检索 该功能提供查询三维场景上所有元素的信息检索功能


信息检索触发时机和使用场景

1.当需要检索三维模型标注时,使用'modelLoadedAll'事件可以准确获取
const queryParams = {
    nodeType: esmap.ESNodeType.MODEL3D, // nodeType指定为三维模型
    keyword: '工作人员'                   // 关键词查询,根据关键字模糊查询结果
};

map.on('modelLoadedAll', function (e) {
    esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
        console.log(data)
    })
});
2.当场景中没有三维模型标注时,'modelLoadedAll'事件不触发,可以使用'loadComplete'事件获取
const queryParams = {
    nodeType: esmap.ESNodeType.MODEL, // nodeType指定为房间模型
    keyword: '车位'   
};

map.on('loadComplete', function (e) {
    esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
        console.log(data)
    })
}); 
3.需要检索自行创建的标注时,请确保标注生成后调用检索方法
esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
    console.log(data)
})

三维场景数据信息检索方法

/**
    * 检索方法
    * @param map 三维场景对象
    * @param queryFloors 楼层搜索范围
    * @param queryParams 其他检索信息
    * @param callback 查询结果的回调函数
*/

esmap.ESMapUtil.search(map, queryFloors, queryParams, function (data) {
    // 回调函数输出的data为查询结果
    console.log(data)   
})
参数queryFloors
// 三种查询情况
var queryFloors = 'all'     // 对所有楼层检索
var queryFloors = 1         // 查询某层楼
var queryFloors = [1,2,3]   // 查询多个楼层
参数queryParams
var queryParams = {
    nodeType: esmap.ESNodeType.MODEL, // nodeType指定为房间模型
    keyword: '车位'                   // 关键词查询,根据关键字模糊查询结果
};

参数说明:

参数 说明 类型 可选值 默认值 是否必填
nodeType 模型类型 String MODEL(房间)
FACILITY(图片poi)LABEL(文字poi)
IMAGE_MARKER(自定义图片标注)
TEXT_MARKER(自定义文字标注)
MODEL3D(三维模型标注)
esmap.ESNodeType.MODEL
name 三维场景元素name,精确查询,结果可能是多个 String —— ——
keyword 关键词查询,模糊查询结果 String —— ——
ID 三维场景元素ID,精确查询(同时支持三维场景元素ID列表数组) Number || Array —— ——
FloorNum 元素所属楼层,与第一步骤中queryFloors作用一样,但此处只能指定单个楼层 Number —— ——
typeID 元素所属分类ID,(三维场景编辑器里配置) Number —— ——
dataID 用户在编辑器中配置的自定义ID,(三维场景编辑器里配置) Number —— ——
types 检索的图层类型 Array(多选)。如不指定,默认检索三维场景所有类型的图层。 esmap.ESLayerType.MODEL(房间)
esmap.ESLayerType.MODEL_LABEL(文字label)
esmap.ESLayerType.MODEL_POI (图片poi)
esmap.ESLayerType.IMAGE_MARKER(自定义图片标注)
esmap.ESLayerType.TEXT_MARKER (自定义文字标注)
esmap.ESLayerType.MODEL3D(三维模型标注)
esmap.ESLayerType.LOCATION_MARKER (定位标注)
esmap.ESLayerType
coord 根据范围查询的中心点,必须与radius一起使用才可以生效。 Object —— { x: map.center.x, y: map.center.y }
radius 范围查询的半径,单位为米。(如果根据范围查询时必填) Number —— ——

各种情况下的参数示例:

// 根据关键字模糊查询,如查询关键字为'车位'的房间模型
var queryParams = {
    nodeType: esmap.ESNodeType.MODEL, // nodeType指定为房间模型
    keyword: '车位'
};

// 查询自定义ID(dataID,三维场景编辑器编辑的用户自定义ID)为 '38747' 的房间模型 (2021.11新增参数)
var queryParams = {
    nodeType: esmap.ESNodeType.MODEL, // nodeType指定为房间模型
    dataID: '38747',  // dataID支持字符串类型
    // name: '出口'   或者根据name查询
};

// 按分类搜索,查询所有分类为休息区(typeID = 30003)的房间模型,会查出所有以2开头的二级分类的房间
var queryParams = {
    nodeType: esmap.ESNodeType.MODEL, // nodeType指定为房间模型
    typeID: 30003     // 分类30003为休息区
};

// 检索多种元素,如查询所有name为'电梯'的label,3D模型和房间模型
var queryParams = {
    types: [ esmap.ESLayerType.MODEL_LABEL, esmap.ESLayerType.MODEL3D, esmap.ESLayerType.MODEL ],
    name: '电梯'
}

信息检索示例:

var queryParams = {
    nodeType: esmap.ESNodeType.MODEL3D, // nodeType指定为3D模型
    keyword: '灯'                       // 关键词查询,根据关键字模糊查询结果
};
// 示例: 根据关键字模糊查询,在所有楼层查询关键字为'灯'的3D模型
esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
    // 输出结果为所有楼层中有关键字'灯'的3D模型
    console.log(data)
})

// 示例: 查询一楼所有房间模型
esmap.ESMapUtil.search(map, 1, { nodeType: esmap.ESNodeType.MODEL }, function(data){
    // 输出结果为1层的所有的房间模型
    console.log(data)
})

// 示例: 查询三,四,五楼所有3D模型:
esmap.ESMapUtil.search(map, [3,4,5], {nodeType: esmap.ESNodeType.MODEL3D}, function(data){
    // 输出结果为3,4,5层的所有的3D模型
    console.log(data)
})

周边信息检索示例: 该功能提供根据距离寻找当前位置附近的信息

// 第一步,确定中心点
var coord = { 
    x: 12694512.917888649,
    y: 2569003.7859249497
}

// 第二步,确定搜索半径radius(单位: 米/m)
var radius = 30;

// 第三步,开始查询
var queryParams = {
    // 查询的中心点
    mapCoord: coord,
    // 查询的范围半径
    radius: radius,
    // 要查询的类型
    nodeType: esmap.ESNodeType.MODEL
}

esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
    // 输出查询结果
    console.log(data);
});

三维模型应用示例:

该示例提供检索出三维模型,并进行对应的api操作(例如隐藏、显示和修改颜色等)
// ====== 方法1:使用search检索出场景信息数据,并进行操作 ======

var queryParams = {
    nodeType: esmap.ESNodeType.MODEL3D, // nodeType指定为3D模型
    keyword: '灯杆'                       // 关键词查询,根据关键字模糊查询结果
};
// 示例: 根据关键字模糊查询,在所有楼层查询关键字为'灯杆'的3D模型
esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
    // 输出结果为所有楼层中有关键字'灯杆'的三维模型
    console.log(data)

    // 获取结果data是数组,循环遍历隐藏'灯杆'三维模型
    data.forEach( marker => {
        // 设置三维模型的显隐
        map.change3dVisible({
            id: marker.ID,  // 三维模型的id值
            value: false,   // true显示,false隐藏,
            bid:'test666'   // 可忽略,绑定对应三维场景id
        })
        // marker.visible = false   // 该显隐方法适用于POI标注,当nodeType为FACILITY时

        // 或者改变颜色
        map.change3dColor({
            id: marker.ID,  // 三维模型的id值
            color:'#FF0000' // 赋值false时还原默认颜色
        })
    })
})


// ====== 方法2:使用api直接批量更改三维模型的显隐和颜色 ======

// name值相同的三维模型可批量显隐和改色,name值可以是字符串,也可以是数组
map.change3dVisible({
    name: ['灯杆', '保安亭'], // 三维模型的name值
    value: false,            // true显示,false隐藏,
    bid:'test666'            // 可忽略,绑定对应三维场景id
})

map.change3dColor({
    name:['灯杆','摄像头'],   // 三维模型的name值
    fnum:[1],                // 指定楼层
    color:'#FF0000'         
})

检索POI应用示例:
该示例提供检索出POI,并进行对应的api操作(例如隐藏显示)
var queryParams = {
    nodeType: esmap.ESNodeType.FACILITY, // nodeType指定为三维场景POI
};
// 示例: 查询在场景内所有的三维场景POI
esmap.ESMapUtil.search(map, 'all', queryParams, function (data) {
    // 输出结果为所有楼层中的三维场景POI
    console.log(data)

    // 获取结果data是数组,循环遍历隐藏POI
    data.forEach( marker => {
        marker.visible = fasle 
    })
})

三维场景分类分为一级12种分类,100多种二级分类,需要详细的三维场景分类,请加QQ群进行咨询