首页 > 解决方案 > 如何根据属性过滤 csvLayer?

问题描述

我将首先解释我想要实现的目标。我正在运行基于 javascript API 的 arcgis 应用程序。我正在将 CSVLayer 渲染到我的 SceneView 中,如下所示:

  require(["esri/Map", "esri/layers/CSVLayer", "esri/views/SceneView", "esri/widgets/BasemapToggle", "esri/Graphic", "esri/tasks/support/Query", "esri/widgets/Legend", "esri/widgets/Expand"],
    function (Map, CSVLayer, SceneView, BasemapToggle, Graphic, Query, Legend, Expand) {
  var csvLayer = new CSVLayer({
            url: numberLayers[0].Url,
            popupTemplate: template,
            featureReduction: {
                type: "selection"
            }
        });
        csvLayer.renderer = {
            type: "simple",
            symbol: {
                type: "simple-marker",
                style: "circle",
                color: [255, 255, 255, 1],
                outline: { color: [0, 0, 0, 0.4] },
                size: 16,
            },
            label: "PurpleAir Sensors",
            visualVariables: [colorVisual]
        };
  var map = new Map({ basemap: "streets-navigation-vector", layers: csvLayer });
        var view = new SceneView({
            container: "divSensorMapContainer",
            camera: {
                position: [
                    -119.289320,
                    35.216734,
                    2100000,
                ],
            },
            map: map,
            center: centerPoint,
            constraints: {
                altitude: {
                    min: 0,
                    max: 9000000,
                },
            },
        });

我想要做的是根据 CSVLayer 中定义的属性过滤这些数据。我尝试使用 .whenLayerView 函数来捕获图层视图,然后运行 ​​.filter 属性来过滤数据集。

  view.whenLayerView(csvLayer)
            .then(function (layerView) {
              sensorLayerView = layerView;
                var newQuery = csvLayer.createQuery();
                newQuery.where = "PM25 > '40'";
                sensorLayerView.filter = newQuery;
                csvLayer.queryFeatures(newQuery).then(function (result) {
                    if (highlight) {
                        highlight.remove();
                    }
                    highlight = sensorLayerView.highlight(result.features);
                });
                view.ui.move(["compass", "zoom", "navigation-toggle"], "bottom-right");
           });

现在在这个 .whenLayerView 函数中我们得到 layerview,根据数据集定义一个查询,然后做两件事:

  1. 根据查询信息突出显示传感器。
  2. 在 layerView 上运行过滤器属性。(此处给出了 Api 参考信息:https ://developers.arcgis.com/javascript//latest/api-reference/esri-views-layers-CSVLayerView.html#filter )这是输出:

在此处输入图像描述

那么有谁知道我做错了什么?我使用了一个参考教程来做到这一点,你可以在这里找到:

https://developers.arcgis.com/javascript//latest/sample-code/featurefilter-attributes/index.html

标签: javascriptarcgisarcgis-js-api

解决方案


过滤器的参数只是具有“where”属性的对象,而不是 ESRI 查询对象。

所以它应该是:

sensorLayerView.filter = {
  where: "PM25 > '40'"
};

这将自动转换为新的FeatureFilter


推荐阅读