SuperMap iClient3D for Cesium之模型数据集发布数据服务实现快速查询

  SuperMap官网WebGL范例里对模型进行属性查询,用到三种方法:
  1.模型数据集发布数据服务进行查询;
  2.模型数据集转成二维面数据集或者属性表,对二维面或者属性表发布数据服务进行查询;
  3.通过模型缓存进行属性查询。
  以上三种方式具体实现过程可见博客https://blog.csdn.net/supermapsupport/article/details/124879325。上述查询方法各有优缺点,小编整理了根据不同数据类型发布服务在前端进行查询的功能对比,如下图所示:
SuperMap iClient3D for Cesium之模型数据集发布数据服务实现快速查询_第1张图片
可以根据自己的项目需求选择适合自己的属性查询方式。本文着重说明一下模型数据集发布数据服务实现快速查询的方法

1.主要参数

  通过查看iServer的帮助文档可以看到对 feature 资源执行 GET 请求,获取要素的信息,可以在 URI 中包含如下参数hasGeometry。当不传参数时,默认地,对 feature 资源执行 GET 请求,得到的表述中会包含几何对象的信息,这种查询请求时间会较长。相反查询不包含几何对象信息时,查询速度会和属性表查询一样快。

在这里插入图片描述
  WebGL连接数据服务进行属性查询,主要接口见API,可以看到也有hasGeometry这个参数,如下图所示:
SuperMap iClient3D for Cesium之模型数据集发布数据服务实现快速查询_第2张图片

2.实现代码

  WebGL连接模型数据服务属性查询关键代码:

var layer = scene.layers.find('BIMbuilding');
                //读取子图层信息,通过数组的方式返回子图层的名称以及子图层所包含的对象的IDs
                layer.setQueryParameter({
                    url:"http://www.supermapol.com/realspace/services/data-BIMbuilding/rest/data",
                    dataSourceName : "BIMBuilding",
                    isMerge : true,
                    hasGeometry:false
                });

  WebGL连接模型数据服务SQL查询关键代码:

 var sqlParameter = {
                "datasetNames": ["三维模型数据:Building"],
                getFeatureMode: "SQL",
                queryParameter: {
                    attributeFilter: sqlStr
                },
                hasGeometry:false
            };

3.测试结果

  模型数据集A共210条记录,发布数据服务,查询语句为:Name=‘中国农机科研院宿舍’,当hasGeometry为true时,7.15s才有返回值;当hasGeometry为false时,0.33s就有返回值。该模型数据集另存属性表发布数据服务,查询0.33s有返回值。
  模型数据集B共52846条记录,发布数据服务,查询语句为:bz=‘武林门’,当hasGeometry为true时,16.25s才有返回值;当hasGeometry为false时,0.33s就有返回值。该模型数据集另存属性表发布数据服务,查询0.33s有返回值。
  测试结论:模型数据集发布数据服务进行属性查询,建议参数hasGeometry设置为false,和属性表发布数据服务查询速度相当。

你可能感兴趣的:(三维前端,3d)