ESRI Javascript FeatureLayer Seleccionar por atributos

8

Estoy tratando de seleccionar un grupo de características en una API de JavaScript ESRI featureLayer por atributo. La llamada falla. Mi código es el siguiente. Aquí está la definición de la capa:

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

Luego relleno la capa usando applyEditsy luego consulto la capa usando esta función:

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

Y llamándolo así:

queryCounty("Jefferson");

Cuando hago eso me sale el siguiente error:

"Error: FeatureLayer :: selectFeatures - la consulta contiene uno o más parámetros no compatibles

Hay algunos ejemplos en línea decentes de esta función que utilizan consultas de geometría, pero ninguno que he encontrado que utiliza y consulta de atributos. ¿Qué me estoy perdiendo?

Frank Conry
fuente
¿Tiene algo que ver con gis.stackexchange.com/a/112438/5850
vinayan

Respuestas:

3

¿Estás creando featurelayer por FeatureLayer (featureCollectionObject, options?) ?

En caso afirmativo, hay alguna restricción para el objeto de capa de características. No puede ejecutar consultas en tales capas.

Consulte los documentos https://developers.arcgis.com/javascript/jsapi/featurelayer-amd.html#featurelayer2

Shabeerali
fuente
El documento dice "No admite consultas que deben realizarse en el servidor " ya que estoy en modo de instantánea, todo persiste en el cliente, ¿verdad? Todas las características ya están cargadas con atributos, no hay un componente del servidor.
Frank Conry
1
Creo que la consulta con where solo funcionará con la capa de características que tiene del servidor. Consulte el hilo geonet.esri.com/thread/14137 Para probar intente ejecutar la consulta con objectid
Shabeerali
1

Es torpe, pero puede consultar la extensión del mapa y luego recorrer los resultados para obtener los atributos que desea. Por ejemplo:

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
fuente