我如何隐藏一个图形在一个特征层?
如果我点击一个功能,我得到一个弹出窗口与动作按钮“隐藏功能”。
在代码中,我正在监听相应的事件,如
我已经尝试将所选特征的可见性设置为false,但它仍然可见:
mapView.popup.selectedFeature.visible = false;
即使我试图删除FeatureLayer的所有图形,它们仍然是可见的:
const featureLayer = mapView.popup.selectedFeature.layer as featureLayer;featureLayer.removeAll ();featureLayer.refresh ();
我还尝试设置筛选层的definitionExpression,但这也没有效果。
是否有一种简单的方法可以通过设置可见性或从FeatureLayer中删除功能来隐藏单个图形?
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;}}); });
这是一个代码依赖的演示
你可以使用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/