如何隐藏一个单一的图形在一个FeatureLayer

108
3.
12-09-2022 04:55
KevinWrona
通过
新贡献者II

我如何隐藏一个图形在一个特征层?

如果我点击一个功能,我得到一个弹出窗口与动作按钮“隐藏功能”。

在代码中,我正在监听相应的事件,如

我已经尝试将所选特征的可见性设置为false,但它仍然可见:

mapView.popup.selectedFeature.visible = false;

即使我试图删除FeatureLayer的所有图形,它们仍然是可见的:

const featureLayer = mapView.popup.selectedFeature.layer as featureLayer;featureLayer.removeAll ();featureLayer.refresh ();

我还尝试设置筛选层的definitionExpression,但这也没有效果。

是否有一种简单的方法可以通过设置可见性或从FeatureLayer中删除功能来隐藏单个图形?

3回复
ReneRubalcava
通过
经常贡献者II

FeatureLayer没有removeAll方法,那是GraphicsLayer。

但是你可以通过更新FeatureLayer的definitionExpression来实现这一点。

让defExpression;Let oids = [];view.when(() => {const oidField = featureLayer.objectIdField;view.popup。On ("trigger-action", ({action}) => {if (action;id === "hide-this") {const oid = view.popup.selectedFeature.attributes[oidField];oids.push (oid);defExpression = " $ {oidField}不是($ {oids.join(", ")})”;featureLayer.definitionExpression = defExpression;}}); });

这是一个代码依赖的演示

https://codepen.io/odoe/pen/RwJORed?editors=0010

0荣誉
KevinWrona
通过
新贡献者II

嗨,雷,

谢谢你的快速回复。这适用于我的简单图层。在具有许多功能的层上,我得到了一个性能问题。

一般来说,它看起来像一个变通方案,因为在小层上的性能也不是很好。在一个最多有10个特征的层上,大约需要2秒,而在一个有1000个特征的层上,大约需要10秒……

有没有其他的解决方案,如可见=真/假?

0荣誉
ReneRubalcava
通过
经常贡献者II

你可以使用FeatureFilter,这将在layerView上完成,它将过滤客户端上已经下载的数据。我猜在您的用例中,您正在更新def表达式,它需要基于此重新获取数据,并可能导致性能问题。

但如果你在LayerView上做,数据已经可用,过滤很快。

https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureFilter.html

您可以设置where子句,从而获得更好的性能。数据仍然会正常下载,但在更新定义表达式时不会一直重新获取它。

下面是一个使用它的示例。

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

0荣誉