javascriptangulararcgis-js-apiesri-maps

How to filter a feature layer attributes using custom criteria in ArcGIS Esri map?


I have a parcel layer integrated into my Esri Map inside the Angular application. Now I want to filter and display only the specific parcels that meet the following criteria.

building_area equals to 0, Number_of_units equals to 0 likewise.

How can I filter the feature layer according to these conditions?

.ts

    const parcelLayer = new FeatureLayer({
                url: this.featureLayerUrl,
                });
    
       const esriLayers = [parcelLayer,ageLayer];
    
            const map = new Map({
              basemap: 'topo-vector',
              layers: esriLayers
          });
            const view = new MapView({
              container,
              map: map,
              zoom: 4,
              center: [-97.63, 38.34],
            });

      const createEsriPopupTemplate = function(layer) {
      const config = {
        fields: layer.fields.map(field => (
            {
                name: field.name,
                type: field.type,
                alias: formatName(field.alias)
            }
        )),
        title: formatName(layer.title)
    };
    return popupUtils.createPopupTemplate(config);
  }
    
     for (const layer of esriLayers) {
        view.whenLayerView(layer).then(function (layerView) {
            const popupTemplate = createEsriPopupTemplate(layer)
            if (!popupTemplate) {
                console.log("FeatureLayer has no fields.")
            } else {
                layer.popupTemplate = popupTemplate;
            }
        });
      }

Solution

  • You can use FeatureLayer definitionExpression property to achieve what you are aiming for.

    ArcGIS JS API - FeatureLayer definitionExpression

    This property let you filter the features that will be request to the server and, as a consequence, show in the map. It is a really powerful way to filter data of layers for analysis, view and performance.

    In your case this should work,

    const parcelLayer = new FeatureLayer({
        url: this.featureLayerUrl,
        definitionExpression: "building_area=0 AND Number_of_units=0"
    });