什么是从featureLayer删除所有功能的正确方法


10

我有一个featureLayer,但我不想杀死它并创建另一个。我想从当前featureLayer中删除所有功能。我发现我可以使用applyEdits方法,但是要使用它,我需要拥有要删除的所有功能。虽然我不想单独存储它们。您知道使用ArcGIS Javascript API时清空我的featureLayer的更好方法吗?

Answers:


3

根据Kirk的建议,将featureLayer.selectFeatures()与where子句一起使用,该子句将返回所有特征。一旦拥有所有功能,就将它们作为删除传递给applyEdits()。


这会不会给客户端带来很多功能?如果这是一个很大的数据集,那可能真的很慢。
Kirk Kuykendall

2
唯一的问题是我无法指定正确的where子句-我尝试了“ 1 = 1”,“ OBJECTID> 0”等。但是每当我遇到错误“ FeatureLayer :: selectFeatures-查询包含一个或多个不支持的参数时, ”。代码var query = new esri.tasks.Query(); query.where =“ 1 = 1”; featureLayer.selectFeatures(query,...);
Kirill Lykov 2011年

也许,如果Featurelayer未与任何要素服务连接,则它不支持where子句。你怎么看?
Kirill Lykov 2011年

“如果featurelayer没有与任何要素服务连接,那么它不支持where子句”-是正确的,但是如果是的话,它也不支持编辑。来自API参考:“如果基础层...来自要素服务,则可以对其要素进行编辑”,这意味着您的featureLayer已连接到要素服务
Stephen Lead

“它也不支持编辑”-即使它未与服务连接,我也支持编辑。专家,我必须采取一些解决方法。
Kirill Lykov 2011年


1

如果您在客户端(没有服务器端url)上创建了要素层,则不能将查询与where子句一起使用。通过搜索地图的范围,然后删除找到的所有项目,我可以解决此问题。例如:

function removeAllLayerFeatures(map, layer) {
    require(['esri/tasks/query', 'esri/layers/FeatureLayer'], function (Query, FeatureLayer) {
        var query = new Query();
        query.geometry = map.extent;
        layer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function (results) {
            for (var key in results) {
                layer.remove(results[key]);
            }
        });
    });
}


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.