超图webGL属性查询

38 阅读2分钟

1.通过iserver数据服务查询接口进行查询

//  featureResult 查询. 目前使用 id,spatial,sql 三种featureQuery(parm, info, type) {
      let infoStr = info.dataSource + ":" + info.dataName;
      let params = {};
      if (type == "Point") {
        params = {
          getFeatureMode: "ID",
          datasetNames: [infoStr],
          ids: parm
        };
      } else if (type == "SPATIAL") {
        let geometry = {
          points: parm,
          type: "REGION",
          parts: [1],
          id: 0
        };
        params = {
          getFeatureMode: "SPATIAL",
          datasetNames: [infoStr],
          toIndex: -1,
          geometry: geometry,
          spatialQueryMode: "INTERSECT"
        };
      } else if (type == "SQL") {
        var sql = "";
        for (var i = 1; i < parm.length; i++) {
          sql = sql + " or " + "SMID=" + parm[i];
        }
        let sqlCondition = "SMID=" + parm[0] + sql;
        params = {
          getFeatureMode: "SQL",
          datasetNames: [infoStr],
          maxFeatures: 100,
          queryParameter: {
            attributeFilter: sqlCondition
          },
          hasGeometry: false
        };
      }
      let uri =
        this.baseUrl +
        "data-" +
        info.dataTitle +
        "/rest/data/featureResults.rjson" +
        "?returnContent=true";
      return fetchPost(uri, params);
    }

  • URI 中的参数

名称

含义

returnContent

true 表示直接返回查询结果,即元素类型为 Feature 的数组;false 表示返回创建的 featureResult 资源的 URI。默认不传时为 false。

fromIndex

查询结果的最小索引号。默认值是0,如果该值大于查询结果的最大索引号,则查询结果为空。

toIndex

查询结果的最大索引号。如果该值大于查询结果的最大索引号,则以查询结果的最大索引号为终止索引号。

  • 请求体参数(params)

名称

含义

getFeatureMode

数据查询的模式(ID、SPATIAL、SQL等)

datasetNames

数据集名称,由数据源名和数据集名构成

ids

查询资源的 ID 数组。(ID查询模式必选)

geometry

几何对象(SPATIAL查询模型必选)

queryParameter

查询参数(SQL查询必选)

hasGeometry

是否返回几何对象。默认为true。当 getFeatureMode 不为 ID 时,且 URL 参数 returnContent=true 时,hasGeometry 有效。

出处: 超图WebGL属性查询 · Fellow Travellers

2.通过模型缓存属性查询

①设置图层保存属性S3MTilesLayer.indexedDBSetting .isAttributesSave =true

②使用对应的ID对图层进行查询
S3MTilesLayer - SuperMap3D Documentation 官网

getAttributesById 获取的是本地对象属性信息(indexedDB中的scvd,IE浏览器不支持)。

//1.遍历所有s3m图层-挂接构件属性信息
    layers.forEach(function(layer){
      layer.indexedDBSetting.isAttributesSave = true;
      //layer.indexedDBSetting.isGeoTilesRootNodeSave = true;
      layer.indexedDBSetting.isGeoTilesSave = true;
    });

    // 2.右键事件
    let screenSpaceEventHandlerRight = new SuperMap3D.ScreenSpaceEventHandler(viewer.scene.canvas);
    screenSpaceEventHandlerRight.setInputAction(function (e) {
      let pickedObject = viewer.scene.pick(e.position);
      console.log("RIGHT_CLICK:")
      if (pickedObject && viewer.scene.layers.getSelectedLayer()) {
        viewer.scene.layers.getSelectedLayer().getAttributesById(pickedObject.id).then(function (data) {
          console.log("data:", data)
          componentInfo.value=data;
        })
      }
    }, SuperMap3D.ScreenSpaceEventType.RIGHT_CLICK);