Feature layer definition expression

View on GitHub
Sample viewer app

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

Map with features Map after applied 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 an AGSServiceFeatureTable from a URL.
  2. Create an AGSFeatureLayer from the service feature table.
  3. Add an AGSDefinitionExpression to show specific features only.

Relevant API

  • AGSDefinitionExpression
  • AGSFeatureLayer
  • AGSServiceFeatureTable

About the data

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

Tags

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

Sample Code

DefinitionExpressionViewController.swift
                                                         
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright 2016 Esri.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import UIKit
import ArcGIS

class DefinitionExpressionViewController: UIViewController {
    @IBOutlet private weak var mapView: AGSMapView!

    private var featureLayer: AGSFeatureLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        // add the source code button item to the right of navigation bar
        (self.navigationItem.rightBarButtonItem as! SourceCodeBarButtonItem).filenames = ["DefinitionExpressionViewController"]

        // initialize map using topographic basemap
        let map = AGSMap(basemapStyle: .arcGISTopographic)

        // assign map to the map view's map
        mapView.map = map
        mapView.setViewpoint(AGSViewpoint(center: AGSPoint(x: -13630484, y: 4545415, spatialReference: .webMercator()), scale: 90000))

        // create feature table using a url to feature server's layer
        let featureTable = AGSServiceFeatureTable(url: URL(string: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SF311/FeatureServer/0")!)
        // create feature layer using this feature table
        let featureLayer = AGSFeatureLayer(featureTable: featureTable)

        // add the feature layer to the map
        map.operationalLayers.add(featureLayer)

        // store the feature layer for later use
        self.featureLayer = featureLayer
    }

    @IBAction func applyDefinitionExpression() {
        // adding definition expression to show specific features only
        self.featureLayer.definitionExpression = "req_Type = 'Tree Maintenance or Damage'"
    }

    @IBAction func resetDefinitionExpression() {
        // reset definition expression
        self.featureLayer.definitionExpression = ""
    }
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.