Feature layer definition expression

View inJavaKotlin
View on GitHub
Sample viewer app

Limit the features displayed on a map with a definition expression.

Image of feature layer definition expression

Use case

Set a definition expression to filter out the features to be displayed. You might filter a dataset of tree quality selecting for only those trees which require maintenance or are damaged.

How to use the sample

Tap the 'Apply Expression' button to limit the features requested from the feature layer to those specified by the SQL query definition expression. Tap the 'Reset' button to remove the definition expression on the feature layer, which returns all the records.

How it works

  1. Create a service feature table from a URL with new ServiceFeatureTable(url).
  2. Create a feature layer from the service feature table with new FeatureLayer(serviceFeatureTable).
  3. Set the limit of the features on your feature layer using the setDefinitionExpression().

Relevant API

  • FeatureLayer
  • FeatureLayer.setDefinitionExpression
  • ServiceFeatureTable

About the data

This map displays point features related to crime incidents that have been reported by city residents.


definition expression, filter, limit data, query, restrict data, SQL, where clause

Sample Code

/* Copyright 2016 ESRI
 * All rights reserved under the copyright laws of the United States
 * and applicable international laws, treaties, and conventions.
 * You may freely redistribute and use this sample code, with or
 * without modification, provided you include the original copyright
 * notice and use restrictions.
 * See the Sample code usage restrictions document for further information.

package com.esri.arcgisruntime.samples.featurelayerdefinitionexpression;

import android.os.Bundle;
import android.view.MenuItem;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment;
import com.esri.arcgisruntime.data.ServiceFeatureTable;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReferences;
import com.esri.arcgisruntime.layers.FeatureLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.BasemapStyle;
import com.esri.arcgisruntime.mapping.view.MapView;

public class MainActivity extends AppCompatActivity {

  MapView mMapView;
  FeatureLayer mFeatureLayer;

  boolean applyActive;

  protected void onCreate(Bundle savedInstanceState) {

    // authentication with an API key or named user is required to access basemaps and other
    // location services

    // set up the bottom toolbar

    // inflate MapView from layout
    mMapView = findViewById(R.id.mapView);

    // create a map with the topographic basemap
    ArcGISMap map = new ArcGISMap(BasemapStyle.ARCGIS_TOPOGRAPHIC);

    // create feature layer with its service feature table
    // create the service feature table
    ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable(

    // create the feature layer using the service feature table
    mFeatureLayer = new FeatureLayer(serviceFeatureTable);

    // add the layer to the map

    // set the map to be displayed in the mapview

    // zoom to a view point of the USA
    mMapView.setViewpointCenterAsync(new Point(-13630845, 4544861, SpatialReferences.getWebMercator()), 600000);


  private void applyDefinitionExpression() {
    // apply a definition expression on the feature layer
    // if this is called before the layer is loaded, it will be applied to the loaded layer
    mFeatureLayer.setDefinitionExpression("req_Type = 'Tree Maintenance or Damage'");

  private void resetDefinitionExpression() {
    // set the definition expression to nothing (empty string, null also works)

  private void createBottomToolbar() {

    Toolbar bottomToolbar = findViewById(R.id.bottomToolbar);

    bottomToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
      public boolean onMenuItemClick(MenuItem item) {
        // handle action bar item clicks
        int itemId = item.getItemId();
        // if statement is used because this sample is used elsewhere as a Library module
        if (itemId == R.id.action_def_exp) {
          // check the state of the menu item
          if (!applyActive) {
            // change the text to reset
            applyActive = true;
          } else {
            // change the text to apply
            applyActive = false;
        return true;

  protected void onPause() {

  protected void onResume() {

  protected void onDestroy() {