javascript - 如何根据属性过滤 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,根据数据集定义一个查询,然后做两件事:
- 根据查询信息突出显示传感器。
- 在 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
解决方案
过滤器的参数只是具有“where”属性的对象,而不是 ESRI 查询对象。
所以它应该是:
sensorLayerView.filter = {
where: "PM25 > '40'"
};
这将自动转换为新的FeatureFilter
推荐阅读
- mysql - 部署 Laravel API 和 MySQL-Problems
- asp.net-mvc - asp.net mvc中的服务器端数据表
- r - 具有变量 n 的滞后函数
- angular - 如何使用相同的键为 queryParams 分配多个值?
- android - 为什么 TextView 的对讲文本读取两次,即使 TextView 已填充,提示也会读取?
- php - 如何使用 PHP 组合检查空条件?
- javascript - Gmail API 的多用户同时身份验证
- angular - 角度5中的多选复选框值
- android - 没有 Google Fit 应用程序是否会将每日步数写入 Google Fit API?
- azure-ad-b2c - 在电子邮件验证 ADB2C 自定义策略上调用 Rest API