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?

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.


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


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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.