Learn how to display point, line, and polygon graphics A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more in a map A map is a collection of layers that are displayed in 2D. It is typically composed of a basemap layer and data layers. Learn more .

add a point line and polygon

You typically use graphics A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more 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 A geometry is a geometric shape, such as a point, polyline, or polygon, that contains one or more coordinates and a spatial reference. Learn more , symbol A symbol defines the properties used to display a geometry or text. Learn more , and attributes Attributes are fields and values for a single feature or non-spatial record. They are typically stored in a database or service such as a feature service. Learn more .

In this tutorial, you display points, lines, and polygons on a map as graphics A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more .

Prerequisites

Before starting this tutorial:

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

  2. Your system meets the system requirements.

  3. The ArcGIS Maps SDK for Qt, version 300.0.0 or later is installed.

  4. The Qt 6.8.2 software development framework or later is installed.

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 The ArcGIS Basemap Styles service, also referred to as the Basemap Styles service, is a location service that provides basemap styles and data for the world. It returns styles as Mapbox styles and web maps, and data as vector tiles and/or map tiles. It supports all of the styles in the ArcGIS Basemap style and Open Basemap style family. An ArcGIS Location Platform or ArcGIS Online account is required to use the service. Learn more .

Open a Qt Creator 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 GraphicsOverlay class, declare member function

GraphicsOverlay is a container for temporary graphics to display on your map view. The graphics drawn in graphics overlays are created at runtime and are not persisted when your application closes. Learn more about GraphicsOverlay.

  1. In the display_a_map project, double click Headers > Display_a_map.h to open the file. Add the GraphicsOverlay class to the namespace ArcGISRuntime declaration.

    Display_a_map.h
    class Map;
    class MapQuickView;
    class GraphicsOverlay;
    }
  2. Add the createGraphics private member function declaration. Then save the header file.

    Display_a_map.h
    private:
    Esri::ArcGISRuntime::MapQuickView* mapView() const;
    void setMapView(Esri::ArcGISRuntime::MapQuickView* mapView);
    void setupViewpoint();
    void createGraphics(Esri::ArcGISRuntime::GraphicsOverlay* overlay);

Create a graphics overlay

A graphics overlay A graphics overlay is a client-side, temporary container of graphics to display on a map view or scene view. Learn more is a container for graphics A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more . It is added to a map view A map view is a user interface that displays map layers and graphics in 2D. It controls the area (extent) of the map that is visible and supports user interactions such as pan and zoom. Learn more to display graphics on a map A map is a collection of layers that are displayed in 2D. It is typically composed of a basemap layer and data layers. Learn more . You can add more than one graphics overlay A graphics overlay is a client-side, temporary container of graphics to display on a map view or scene view. Learn more to a map view. Graphics overlays are displayed on top of all the other layers A layer is a reference to a collection of geographic data that is used to access and display data. The data for layers are typically provided by the basemap layer service and data services. Learn more .

  1. Double click on Sources > Display_a_map.cpp to open the file. Include the classes shown.

    Display_a_map.cpp
    #include "Display_a_map.h"
    #include "Map.h"
    #include "MapTypes.h"
    #include "MapQuickView.h"
    #include "Point.h"
    #include "Viewpoint.h"
    #include "SpatialReference.h"
    #include <QFuture>
    #include "Graphic.h"
    #include "GraphicListModel.h"
    #include "GraphicsOverlay.h"
    #include "GraphicsOverlayListModel.h"
    #include "PolylineBuilder.h"
    #include "PolygonBuilder.h"
    #include "SimpleFillSymbol.h"
    #include "SimpleLineSymbol.h"
    #include "SimpleMarkerSymbol.h"
    #include "SymbolTypes.h"
  2. In the setMapView(MapQuickView* mapView) member function, add three lines of code to create a GraphicsOverlay, call the createGraphics method (implemented in following steps), and append the overlay to the map view.

    Display_a_map.cpp
    // Set the view (created in QML)
    void Display_a_map::setMapView(MapQuickView* mapView)
    {
    if (!mapView || mapView == m_mapView)
    {
    return;
    }
    m_mapView = mapView;
    m_mapView->setMap(m_map);
    setupViewpoint();
    GraphicsOverlay* overlay = new GraphicsOverlay(this);
    createGraphics(overlay);
    m_mapView->graphicsOverlays()->append(overlay);
  3. Create a new method named createGraphics(GraphicsOverlay *overlay), right after the setupViewpoint() method.

    Display_a_map.cpp
    void Display_a_map::setupViewpoint()
    {
    const Point center(-118.80543, 34.02700, SpatialReference::wgs84());
    const Viewpoint viewpoint(center, 100000.0);
    m_mapView->setViewpointAsync(viewpoint);
    }
    void Display_a_map::createGraphics(GraphicsOverlay *overlay)
    {
    }

Add a point graphic

A point graphic A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more is created using a point A geometry is a geometric shape, such as a point, polyline, or polygon, that contains one or more coordinates and a spatial reference. Learn more and a marker symbol A symbol defines the properties used to display a geometry or text. Learn more . A point is defined with x and y coordinates for longitude and latitude coordinates, and a spatial reference A spatial reference is a set of parameters, typically defined by a WKID, that define the coordinate system and spatial properties for geographic data. Applications use a spatial reference to correctly display the position of geographic data in a map or scene. Learn more . The spatial reference is WGS84.

  1. Create a Point and a SimpleMarkerSymbol. To create the Point, provide longitude (x) and latitude (y) coordinates, and a SpatialReference.

    Point graphics support a number of symbol types such as SimpleMarkerSymbol, PictureMarkerSymbol_qt and TextSymbol. See Symbol in the API documentation to learn more about symbols.

    Display_a_map.cpp
    void Display_a_map::createGraphics(GraphicsOverlay *overlay)
    {
    // Create a point
    const Point dume_beach(-118.80657463861, 34.0005930608889, SpatialReference::wgs84());
    // Create symbols for the point
    SimpleLineSymbol* point_outline = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor("blue"), 3, this);
    SimpleMarkerSymbol* point_symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle::Circle, QColor("red"), 10, this);
    point_symbol->setOutline(point_outline);
    // Create a graphic to display the point with its symbology
    Graphic* point_graphic = new Graphic(dume_beach, point_symbol, this);
    // Add point graphic to the graphics overlay
    overlay->graphics()->append(point_graphic);
    }

Add a polyline graphic

A line graphic A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more is created using a polyline A geometry is a geometric shape, such as a point, polyline, or polygon, that contains one or more coordinates and a spatial reference. Learn more and a line symbol A symbol defines the properties used to display a geometry or text. Learn more . A polyline is defined as a sequence of points.

Polylines have one or more distinct parts. Each part is defined by two points. To create a continuous line with just one part, use the Polyline constructor. To create a polyline with more than one part, use a PolylineBuilder. Polyline graphics support a number of symbol types, such as SimpleLineSymbol and TextSymbol. See Symbol in the API documentation to learn more about symbols.

  1. Create a Polyline and a SimpleLineSymbol.

    To create the Polyline, create a new PointCollection with a SpatialReference and use PolylineBuilder to add a new Point objects to it. Add the highlighted code.

    Display_a_map.cpp
    void Display_a_map::createGraphics(GraphicsOverlay *overlay)
    {
    // Create a point
    const Point dume_beach(-118.80657463861, 34.0005930608889, SpatialReference::wgs84());
    // Create symbols for the point
    SimpleLineSymbol* point_outline = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor("blue"), 3, this);
    SimpleMarkerSymbol* point_symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle::Circle, QColor("red"), 10, this);
    point_symbol->setOutline(point_outline);
    // Create a graphic to display the point with its symbology
    Graphic* point_graphic = new Graphic(dume_beach, point_symbol, this);
    // Add point graphic to the graphics overlay
    overlay->graphics()->append(point_graphic);
    // Create a line
    PolylineBuilder* polyline_builder = new PolylineBuilder(SpatialReference::wgs84(), this);
    polyline_builder->addPoint(-118.8215, 34.0140);
    polyline_builder->addPoint(-118.8149, 34.0081);
    polyline_builder->addPoint(-118.8089, 34.0017);
    // Create a symbol for the line
    SimpleLineSymbol* line_symbol = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor(Qt::blue), 3, this);
    // Create a graphic to display the line with its symbology
    Graphic* polyline_graphic = new Graphic(polyline_builder->toGeometry(), line_symbol, this);
    // Add line graphic to the graphics overlay
    overlay->graphics()->append(polyline_graphic);
    }

Add a polygon graphic

A polygon graphic A graphic is a visual element composed of a geometry, symbol, and attributes that is displayed on a map or scene. Learn more is created using a polygon A geometry is a geometric shape, such as a point, polyline, or polygon, that contains one or more coordinates and a spatial reference. Learn more and a fill symbol A symbol defines the properties used to display a geometry or text. Learn more . A polygon is defined as a sequence of points that describe a closed boundary.

Polygons have one or more distinct parts. Each part is a sequence of points describing a closed boundary. For a single area with no holes, you can use Polygon to create a polygon with just one part. To create a polygon with more than one part, use PolygonBuilder.

Polygon graphics support a number of symbol types such as SimpleFillSymbol, PictureFillSymbol, SimpleMarkerSymbol, and TextSymbol. See Symbol in the API documentation to learn more about symbols.

  1. Create a Polygon and a SimpleFillSymbol. To create the Polygon, create a new PointCollection with a SpatialReference and use PolygonBuilder to add new Point objects to it. Add the highlighted code.

    Display_a_map.cpp
    void Display_a_map::createGraphics(GraphicsOverlay *overlay)
    {
    // Create a point
    const Point dume_beach(-118.80657463861, 34.0005930608889, SpatialReference::wgs84());
    // Create symbols for the point
    SimpleLineSymbol* point_outline = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor("blue"), 3, this);
    SimpleMarkerSymbol* point_symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle::Circle, QColor("red"), 10, this);
    point_symbol->setOutline(point_outline);
    // Create a graphic to display the point with its symbology
    Graphic* point_graphic = new Graphic(dume_beach, point_symbol, this);
    // Add point graphic to the graphics overlay
    overlay->graphics()->append(point_graphic);
    // Create a line
    PolylineBuilder* polyline_builder = new PolylineBuilder(SpatialReference::wgs84(), this);
    polyline_builder->addPoint(-118.8215, 34.0140);
    polyline_builder->addPoint(-118.8149, 34.0081);
    polyline_builder->addPoint(-118.8089, 34.0017);
    // Create a symbol for the line
    SimpleLineSymbol* line_symbol = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor(Qt::blue), 3, this);
    // Create a graphic to display the line with its symbology
    Graphic* polyline_graphic = new Graphic(polyline_builder->toGeometry(), line_symbol, this);
    // Add line graphic to the graphics overlay
    overlay->graphics()->append(polyline_graphic);
    // Create a list of points to make up the polygon
    const QList<Point> points = {
    Point(-118.8190, 34.0138),
    Point(-118.8068, 34.0216),
    Point(-118.7914, 34.0164),
    Point(-118.7960, 34.0086),
    Point(-118.8086, 34.0035),
    };
    // Create a polygon using the list of points above
    PolygonBuilder* polygon_builder = new PolygonBuilder(SpatialReference::wgs84(), this);
    polygon_builder->addPoints(points);
    // Create symbols for the polygon
    SimpleLineSymbol* polygon_line_symbol = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor(Qt::blue), 3, this);
    SimpleFillSymbol* fill_symbol = new SimpleFillSymbol(SimpleFillSymbolStyle::Solid, QColor(Qt::yellow), polygon_line_symbol, this);
    // Create a graphic to display the polygon with its symbology
    Graphic* polygon_graphic = new Graphic(polygon_builder->toGeometry(), fill_symbol, this);
    // Add polygon graphic to the graphics overlay
    overlay->graphics()->append(polygon_graphic);
    }

Set developer credentials

For the final steps of this tutorial, click the tab below that corresponds to the authentication type (API key authentication or User authentication) that you chose when you completed the Display a map tutorial.

Be sure to also provide the same authentication (API key or user authentication Client ID/Redirect URL) that you used for the Display a map tutorial.

Set the API Key

  1. In the project Sources folder of Qt Creator, open the main.cpp file.

  2. Modify the code to set the accessToken using your API key access token (highlighted in yellow).

    main.cpp
    // The following methods grant an access token:
    // 1. User authentication: Grants a temporary access token associated with a user's ArcGIS account.
    // To generate a token, a user logs in to the app with an ArcGIS account that is part of an
    // organization in ArcGIS Online or ArcGIS Enterprise.
    // 2. API key authentication: Get a long-lived access token that gives your application access to
    // ArcGIS location services. Go to the tutorial at https://links.esri.com/create-an-api-key.
    // Copy the API Key access token.
    const QString accessToken = QString("");
    if (accessToken.isEmpty())
    {
    qWarning() << "Use of ArcGIS location services, such as the basemap styles service, requires" <<
    "you to authenticate with an ArcGIS account or set the API Key property.";
    }
    else
    {
    ArcGISRuntimeEnvironment::setApiKey(accessToken);
    }
  3. Save the main.cpp file.

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.

Press Ctrl + R to run the 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 .pro project file in Qt Creator.

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

For the final steps of this tutorial, click the tab below that corresponds to the authentication type (API key authentication or User authentication) that you chose when you completed the Display a map tutorial.

Be sure to also provide the same authentication (API key or user authentication Client ID/Redirect URL) that you used for the Display a map tutorial.

Set developer credentials in the solution

Set the API Key

  1. In the project Sources folder of Qt Creator, open the main.cpp file.

  2. Modify the code to set the accessToken using your API key access token (highlighted in yellow).

    main.cpp
    // The following methods grant an access token:
    // 1. User authentication: Grants a temporary access token associated with a user's ArcGIS account.
    // To generate a token, a user logs in to the app with an ArcGIS account that is part of an
    // organization in ArcGIS Online or ArcGIS Enterprise.
    // 2. API key authentication: Get a long-lived access token that gives your application access to
    // ArcGIS location services. Go to the tutorial at https://links.esri.com/create-an-api-key.
    // Copy the API Key access token.
    const QString accessToken = QString("");
    if (accessToken.isEmpty())
    {
    qWarning() << "Use of ArcGIS location services, such as the basemap styles service, requires" <<
    "you to authenticate with an ArcGIS account or set the API Key property.";
    }
    else
    {
    ArcGISRuntimeEnvironment::setApiKey(accessToken);
    }
  3. Save main.cpp file.

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 solution

Press Ctrl + R to run the app.

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

What’s next?

Learn how to use additional API features, ArcGIS location services, and ArcGIS tools in these tutorials: