Skip to content

Learn how to display point, line, and polygon graphics in a map.

add a point line and polygon

You typically use graphics to display geographic data that is not connected to a database and that is not persisted, like highlighting a route between two locations, displaying a search buffer around a selected point, or showing the location of map coordinates entered by the user. Graphics are composed of a geometry, symbol, and attributes.

In this tutorial, you display points, lines, and polygons on a map as graphics.

Prerequisites

Before starting this tutorial:

  1. You need an ArcGIS Location Platform or ArcGIS Online account.

  2. Your system meets the system requirements.

  3. You need an IDE for Flutter - we recommend VS Code.

Develop or download

You have two options for completing this tutorial:

  1. Option 1: Develop the code or
  2. Option 2: Download the completed solution

Option 1: Develop the code

To start the tutorial, complete the Display a map tutorial. This creates a map to display the Santa Monica Mountains in California using the topographic basemap from the ArcGIS Basemap Styles service.

Open a Flutter project

  1. Open the project you created by completing the Display a map tutorial.

  2. Continue with the following instructions to display a point, line, and polygon in the map.

Add a graphics overlay

A graphics overlay is a container for graphics. It is used with a map view to display graphics on a map. You can add more than one graphics overlay to a map view. Graphics overlays are displayed on top of all the other layers.

  1. Open lib\main.dart.

  2. In onMapViewReady(), create a GraphicsOverlay and add it to the map view controller.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
      void onMapViewReady() {
    
        final map = ArcGISMap.withBasemapStyle(BasemapStyle.arcGISTopographic);
    
        _mapViewController.arcGISMap = map;
    
        // Create a new graphics overlay object.
        final graphicsOverlay = GraphicsOverlay();
    
        // Add the graphics overlay to the map view controller.
        _mapViewController.graphicsOverlays.add(graphicsOverlay);
    
        _mapViewController.setViewpoint(
          Viewpoint.withLatLongScale(
            latitude: 34.02700,
            longitude: -118.80500,
            scale: 72000,
          ),
        );
    
      }
    

Add a point graphic

A point graphic is created using a point and a marker symbol. A point is defined with x and y coordinates, and a spatial reference. For latitude and longitude coordinates, the spatial reference is WGS84.

  1. Create an ArcGISPoint and a SimpleMarkerSymbol. To create the ArcGISPoint, provide longitude (x) and latitude (y) coordinates, and a SpatialReference. Use the SpatialReference.wgs84 convenience property. Create and style a SimpleMarkerSymbol.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        _mapViewController.setViewpoint(
          Viewpoint.withLatLongScale(
            latitude: 34.02700,
            longitude: -118.80500,
            scale: 72000,
          ),
        );
    
        // Create an ArcGIS point with long and lat
        // and set the spatial reference.
        final point = ArcGISPoint(
          x: -118.80657463861,
          y: 34.0005930608889,
          spatialReference: SpatialReference.wgs84,
        );
    
        // Create a new orange circle with a solid blue outline symbol.
        final pointSymbol =
            SimpleMarkerSymbol(
                style: SimpleMarkerSymbolStyle.circle,
                color: Colors.orange,
                size: 10,
              )
              ..outline = SimpleLineSymbol(
                style: SimpleLineSymbolStyle.solid,
                color: Colors.blue,
                width: 2,
              );
    
  2. Create a Graphic with the point and pointSymbol. Display the Graphic by adding it to the graphicOverlay's list of graphics.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        // Create an ArcGIS point with long and lat
        // and set the spatial reference.
        final point = ArcGISPoint(
          x: -118.80657463861,
          y: 34.0005930608889,
          spatialReference: SpatialReference.wgs84,
        );
    
        // Create a new orange circle with a solid blue outline symbol.
        final pointSymbol =
            SimpleMarkerSymbol(
                style: SimpleMarkerSymbolStyle.circle,
                color: Colors.orange,
                size: 10,
              )
              ..outline = SimpleLineSymbol(
                style: SimpleLineSymbolStyle.solid,
                color: Colors.blue,
                width: 2,
              );
    
        // Create a graphic using the point and point symbol defined earlier.
        final pointGraphic = Graphic(geometry: point, symbol: pointSymbol);
    
        // Add the graphic to the graphics overlay to display it.
        graphicsOverlay.graphics.add(pointGraphic);
    

Run the app

  1. Make sure you have an Android emulator, iOS simulator or physical device configured and running.

  2. In VS Code, select Run > Run Without Debugging.

You should see a point graphic in Point Dume State Beach.

Add a line graphic

A line graphic is created using a polyline and a line symbol. A polyline is defined as a sequence of points.

  1. Create a Polyline and a SimpleLineSymbol. To create the Polyline, call the addPointXY() method on PolylineBuilder for each (x, y) coordinate pair that defines a point along the polyline's path. Create and style a SimpleLineSymbol.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        // Add the graphic to the graphics overlay to display it.
        graphicsOverlay.graphics.add(pointGraphic);
    
        // Create a polyline builder and set its spatial reference.
        // Use the `addPointXY()` method to add (x,y) coordinates one at a time
        // that define the polyline's geometry.
        final polylineBuilder =
            PolylineBuilder(spatialReference: SpatialReference.wgs84)
              ..addPointXY(x: -118.82152, y: 34.01395)
              ..addPointXY(x: -118.81489, y: 34.00806)
              ..addPointXY(x: -118.80887, y: 34.00166);
    
        // Retrieve the polyline's geometry that the builder constructed.
        final polyline = polylineBuilder.toGeometry();
    
        // Create a solid blue line simple line symbol.
        final polylineSymbol = SimpleLineSymbol(
          style: SimpleLineSymbolStyle.solid,
          color: Colors.blue,
          width: 3,
        );
    
  2. Create a Graphic with the polyline and polylineSymbol. Display the Graphic by adding it to the list of graphics.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        // Retrieve the polyline's geometry that the builder constructed.
        final polyline = polylineBuilder.toGeometry();
    
        // Create a solid blue line simple line symbol.
        final polylineSymbol = SimpleLineSymbol(
          style: SimpleLineSymbolStyle.solid,
          color: Colors.blue,
          width: 3,
        );
    
        // Create a graphic using the polyline and polyline symbol defined earlier.
        final polylineGraphic = Graphic(geometry: polyline, symbol: polylineSymbol);
    
        // Add the graphic to the graphics overlay to display it.
        graphicsOverlay.graphics.add(polylineGraphic);
    
  3. Use Flutter's hot restart to load your code changes and restart the app.

You should see a point and line graphic along Westward Beach.

Add a polygon graphic

A polygon graphic is created using a polygon and a fill symbol. A polygon is defined as a sequence of points that describe a closed boundary.

  1. Create a Polygon and a SimpleFillSymbol. To create the Polygon, call the addPointXY() method on PolygonBuilder for each (x,y) coordinate pair that defines a point on the closed boundary. Create and style a SimpleFillSymbol.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        // Add the graphic to the graphics overlay to display it.
        graphicsOverlay.graphics.add(polylineGraphic);
    
        // Create a polygon builder and set its spatial reference.
        // Use the `addPointXY()` method to add (x,y) coordinates one at a time
        // that define the polygon's geometry.
        final polygonBuilder =
            PolygonBuilder(spatialReference: SpatialReference.wgs84)
              ..addPointXY(x: -118.81898, y: 34.01375)
              ..addPointXY(x: -118.80679, y: 34.02158)
              ..addPointXY(x: -118.79143, y: 34.01638)
              ..addPointXY(x: -118.79596, y: 34.00856)
              ..addPointXY(x: -118.80855, y: 34.00350);
    
        // Retrieve the polygon's geometry that the builder constructed.
        final polygon = polygonBuilder.toGeometry();
    
        // Create an orange fill with solid blue line outline simple fill symbol.
        final polygonSymbol = SimpleFillSymbol(
          style: SimpleFillSymbolStyle.solid,
          color: Colors.orange,
          outline: SimpleLineSymbol(
            style: SimpleLineSymbolStyle.solid,
            color: Colors.blue,
            width: 2,
          ),
        );
    
  2. Create a Graphic with the polygon and polygonSymbol. Display the Graphic by adding it to the list of graphics.

    main.dart
    Use dark colors for code blocks
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
        // Retrieve the polygon's geometry that the builder constructed.
        final polygon = polygonBuilder.toGeometry();
    
        // Create an orange fill with solid blue line outline simple fill symbol.
        final polygonSymbol = SimpleFillSymbol(
          style: SimpleFillSymbolStyle.solid,
          color: Colors.orange,
          outline: SimpleLineSymbol(
            style: SimpleLineSymbolStyle.solid,
            color: Colors.blue,
            width: 2,
          ),
        );
    
        // Create a graphic using the polygon and polygon symbol defined earlier.
        final polygonGraphic = Graphic(geometry: polygon, symbol: polygonSymbol);
    
        // Add the graphic to the graphics overlay to display it.
        graphicsOverlay.graphics.add(polygonGraphic);
    
  3. Hot restart your app.

You should see a point, line, and polygon graphic around Mahou Riviera in the Santa Monica Mountains.

Alternatively, you can download the tutorial solution, as follows.

Option 2: Download the solution

  1. Click the Download solution link under Solution and unzip the file to a location on your machine.

  2. Open the project in VS code.

Since the downloaded solution does not contain authentication code, you must first set up authentication to create credentials, then add authentication code and set the developer credentials to the solution.

Set up authentication

To access the secure ArcGIS location services used in this tutorial, you must implement API key authentication or user authentication using an ArcGIS Location Platform or an ArcGIS Online account.

To complete this tutorial, click on the tab in the switcher below for your authentication type of choice, either API key authentication or User authentication.

Create a new API key access token with privileges to access the secure resources used in this tutorial.

  1. Complete the Create an API key tutorial and create an API key with the following privilege(s):

    • Privileges
      • Location services > Basemaps
  2. Copy and paste the API key access token into a safe location. It will be used in a later step.

Add authentication code and set developer credentials

To allow your app users to access ArcGIS location services, you will add authentication code and use the developer credentials that you created in the Set up authentication step to authenticate requests for resources.

  1. Open lib/main.dart.

  2. In the main() function, set the ArcGISEnvironment.apiKey value to your access token.

    main.dart
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void main () {
    
      ArcGISEnvironment.apiKey = 'YOUR_ACCESS_TOKEN';
    
      runApp(
    
        const MaterialApp(home: MainApp())
    
      );
    }

Best Practice: The access token is stored directly in the code as a convenience for this tutorial. Do not store credentials directly in source code in a production environment.

Run the application

Follow these steps to run the application.

  1. In VS Code's terminal, run:

    Use dark colors for code blocksCopy
    1
    flutter pub upgrade
  2. Run:

    Use dark colors for code blocksCopy
    1
    dart run arcgis_maps install
  3. Make sure you have an Android emulator, iOS simulator or physical device configured and running.

  4. In VS Code, select Run > Run Without Debugging.

You should see a point, line, and polygon graphic around Mahou Riviera in the Santa Monica Mountains.

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