featureLayerからすべての機能を削除する正しい方法は何ですか


10

私は持っていますが、featureLayerそれを殺して別のものを作りたくありません。現在のfeatureLayerからすべての機能を削除したい。applyEditsメソッドを使用できることがわかりましたが、それを使用するには、削除するすべての機能が必要です。個別に保存したくないのですが。ArcGIS Javascript APIを使用するときに、featureLayerを空にするより良い方法を知っていますか?

回答:


3

Kirkが提案したように、featureLayer.selectFeatures()を使用して、すべての機能を返すwhere句を使用します。すべての機能を取得したら、それらを削除としてapplyEdits()に渡します。


これはクライアントに多くの機能を返さないでしょうか?これが大きなデータセットである場合、実際には遅くなる可能性があります。
カークカイケンダル2011年

2
唯一の問題は、適切なwhere句を指定できないことです。 "1 = 1"、 "OBJECTID> 0"などを試しました。ただし、エラーが発生するたびに、 "FeatureLayer :: selectFeatures-クエリに1つ以上のサポートされていないパラメータが含まれています」コードvar query = new esri.tasks.Query(); query.where = "1 = 1"; featureLayer.selectFeatures(query、...);
Kirill Lykov

おそらく、featurelayerがどのフィーチャサービスとも接続されていない場合、where句はサポートされません。どう思いますか?
Kirill Lykov '20 / 06/20

「featurelayerがどのフィーチャサービスとも接続されていない場合、where句はサポートされません」-正しいですが、そうであれば編集もサポートされません。APIリファレンスから:「基礎となるレイヤー...がフィーチャサービスからのものである場合、そのフィーチャは編集できます」とは、featureLayerがフィーチャサービスに接続されていることを意味する
Stephen Lead

「編集にも対応しない」-サービスに接続していなくても編集をサポートします。Hovewer、私はいくつかの回避策を作らなければなりませんでした。
Kirill Lykov


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]);
            }
        });
    });
}


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.