quelle est la bonne façon de supprimer toutes les fonctionnalités de featureLayer

10

J'en ai un featureLayeret je ne veux pas le tuer et en créer un autre. Je souhaite supprimer toutes les fonctionnalités de la couche de fonctionnalités actuelle. J'ai trouvé que je peux utiliser la applyEditsméthode, mais pour l'utiliser, je dois avoir toutes les fonctionnalités que je veux supprimer. Bien que je ne veuille pas les stocker séparément. Connaissez-vous un meilleur moyen de vider ma couche d'entités lors de l'utilisation de l'API ArcGIS Javascript?

Kirill Lykov
la source

Réponses:

3

Utilisez featureLayer.selectFeatures () avec, comme Kirk l'a suggéré, une clause where qui renverra toutes vos fonctionnalités. Une fois que vous avez toutes vos fonctionnalités, passez-les à applyEdits () comme suppressions.

Derek Swingley
la source
Cela ne rendra-t-il pas beaucoup de fonctionnalités au client? S'il s'agit d'un grand ensemble de données, cela pourrait être très lent.
Kirk Kuykendall
2
Le seul problème est que je ne peux pas spécifier la clause where - j'ai essayé "1 = 1", "OBJECTID> 0", etc. Mais chaque fois que j'ai une erreur "FeatureLayer :: selectFeatures - la requête contient un ou plusieurs paramètres non pris en charge ". Le code var query = new esri.tasks.Query (); query.where = "1 = 1"; featureLayer.selectFeatures (requête, ...);
Kirill Lykov
Peut-être que si featurelayer n'est connecté à aucun service d'entités, il ne prend pas en charge les clauses where. Qu'est-ce que tu penses?
Kirill Lykov
"si featurelayer n'est connecté à aucun service d'entités, il ne prend pas en charge les clauses where" - c'est exact, mais si c'est le cas, il ne prend pas non plus en charge l'édition. D'après la référence de l'API: "Si la couche sous-jacente ... provient d'un service d'entités, ses fonctions peuvent être modifiées", ce qui implique que votre couche de fonctionnalités EST connectée à un service d'entités
Stephen Lead
"il ne prend pas non plus en charge l'édition" - Je prends en charge l'édition même si elle n'est pas connectée au service. Cependant, j'ai dû faire quelques contournements.
Kirill Lykov
4

Essayez de faire un appel de fonctionnalités de suppression REST avec une clause where "1 = 1" ou quelque chose de similaire.

Kirk Kuykendall
la source
1
salut y a-t-il une syntaxe à l'appel des fonctionnalités de suppression REST? pourriez-vous me donner un exemple alors que
j'essaie de le
1

Si vous avez créé la couche d'entités côté client (pas d'URL côté serveur), vous ne pouvez pas utiliser une requête avec une clause where. J'ai pu contourner cela en recherchant l'étendue de la carte, puis en supprimant tous les éléments que j'ai trouvés. Par exemple:

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]);
            }
        });
    });
}
Chris
la source
0

Découvrez la méthode clear () :

Efface tous les graphiques.

featureLayer.clear();
Leniel Maccaferri
la source
-2

Utilisez un curseur de mise à jour , en sélectionnant toutes les fonctionnalités ("*").

Utilisez IFeature.Delete () et stockez-le lorsque vous avez terminé.

ujjwalesri
la source
Cette question demande une solution JavaScript, pas ArcObjects.
Derek Swingley
Oups ... mon erreur! Merci d'ignorer.
ujjwalesri