ESRI Javascript FeatureLayer Select by Attributes

8

J'essaie de sélectionner un groupe de fonctionnalités dans un FeatureLayer de l'API javascript ESRI par attribut. L'appel sort. Mon code est le suivant. Voici la définition de la couche:

    var fieldDefs = [{
        "name": "county",
        "type": "esriFieldTypeString",
        "alias": "county"
    },
    {
        "name": "pop",
        "type": "esriFieldTypeInteger",
        "alias": "pop"
    },

        "name": "ObjectID",
        "alias": "ObjectID",
        "type": "esriFieldTypeOID"
    }
    ];

    var featureCollection = {
              "layerDefinition": null,
              "featureSet": {
                "features": [],
                "geometryType": "esriGeometryPolygon";
              }
            };
    var featureCollection.layerDefinition = {
              "geometryType": "esriGeometryPolygon";,
              "objectIdField": "ObjectID",
              "drawingInfo": {
                "renderer": {
                  "type": "simple",
                  "symbol": symbol
                }
              },
              "fields": fieldDefs
            };
     var featureLayer = new FeatureLayer(featureCollection, {
                  id: idString,
                  mode: FeatureLayer.MODE_SNAPSHOT,
                  fields: fieldDefs
                });

Je remplis ensuite le calque en utilisant applyEditset interroge plus tard le calque en utilisant cette fonction:

queryCounty = function(county_name) {
            var query = new Query();
            query.where = "county = '" + county_name + "'";
            //projectsOverlayMap.clearSelection();
            console.log("WHERE: " + "county = '" + county_name + "'");
            projectsOverlayMap.selectFeatures(query, FeatureLayer.SELECTION_NEW, function(results){
                alert(results.length);
            });

Et l'appeler comme ça:

queryCounty("Jefferson");

Lorsque je fais cela, j'obtiens l'erreur suivante:

"Erreur: FeatureLayer :: selectFeatures - la requête contient un ou plusieurs paramètres non pris en charge

Il existe des exemples décents en ligne de cette fonction utilisant des requêtes de géométrie, mais aucun que j'ai trouvé qui utilise et attribue une requête. Qu'est-ce que je rate?

Frank Conry
la source
cela a-t-il quelque chose à voir avec gis.stackexchange.com/a/112438/5850
vinayan

Réponses:

3

Créez -vous une couche de fonction par FeatureLayer (featureCollectionObject, options?) ?

Si oui, il existe des restrictions pour l'objet de couche de fonction. Vous ne pouvez pas exécuter de requêtes sur ces couches.

Voir la documentation https://developers.arcgis.com/javascript/jsapi/featurelayer-amd.html#featurelayer2

Shabeerali
la source
Le doc dit "Ne prend pas en charge les requêtes qui doivent être effectuées sur le serveur " car je suis en mode instantané, tout persiste sur le client, non? Toutes les fonctionnalités sont déjà chargées avec des attributs, il n'y a pas de composant côté serveur.
Frank Conry
1
Je pense que la requête avec où fonctionnera uniquement avec la couche d'entités provenant du serveur.Référer au thread geonet.esri.com/thread/14137 Pour les tests, essayez d'exécuter la requête avec objectid
Shabeerali
1

C'est maladroit, mais vous pouvez interroger l'étendue de la carte, puis parcourir les résultats pour obtenir les attributs souhaités. Par exemple:

require(['esri/tasks/query', 'esri/layers/FeatureLayer'], function (Query, FeatureLayer) {
    var query = new Query();
    query.geometry = projectsOverlayMap.extent;
    featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function (results) {
        for(var key in results) {
            if(results[key].attributes['county'] === county_name) {
                ... do something ...
            }
        }
    });
}
Chris
la source