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)
})
// 三种查询情况
var queryFloors = 'all' // 对所有楼层检索
var queryFloors = 1 // 查询某层楼
var queryFloors = [1,2,3] // 查询多个楼层
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);
});
// ====== 方法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'
})
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
})
})