Create feature collection layer (Portal item)

View on GitHubSample viewer app

Create a feature collection layer from a portal item.

screenshot

Use case

Feature collection layers are often used to hold features with mixed geometry or unstructured data. You can display feature collections stored in a Portal, which are often used for showing content from a CSV or map notes.

How to use the sample

The feature collection is loaded from the Portal item when the sample starts.

How it works

  1. Create a Portal.
  2. Create the PortalItem, referring to the portal and an item ID.
  3. Verify that the item represents a feature collection.
  4. Create a FeatureCollection from the item.
  5. Create a FeatureCollectionLayer, referring to the feature collection.
  6. Add the feature collection layer to the map's OperationalLayers collection.

Relevant API

  • FeatureCollection
  • FeatureCollectionLayer
  • Portal
  • PortalItem

About the data

The sample uses a sample layer depicting world populations.

Tags

collection, feature collection, feature collection layer, id, item, map notes, portal

Sample Code

FeatureCollectionLayerFromPortal.cppFeatureCollectionLayerFromPortal.cppFeatureCollectionLayerFromPortal.hFeatureCollectionLayerFromPortal.qml
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
// [WriteFile Name=FeatureCollectionLayerFromPortal, Category=Layers]
// [Legal]
// Copyright 2020 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.
// [Legal]

#ifdef PCH_BUILD
#include "pch.hpp"
#endif // PCH_BUILD

// sample headers
#include "FeatureCollectionLayerFromPortal.h"

// ArcGIS Maps SDK headers
#include "Error.h"
#include "FeatureCollection.h"
#include "FeatureCollectionLayer.h"
#include "LayerListModel.h"
#include "Map.h"
#include "MapQuickView.h"
#include "MapTypes.h"
#include "Portal.h"
#include "PortalItem.h"
#include "PortalTypes.h"

using namespace Esri::ArcGISRuntime;

namespace
{
const QString featureCollectionItemId("32798dfad17942858d5eef82ee802f0b");
}

FeatureCollectionLayerFromPortal::FeatureCollectionLayerFromPortal(QObject* parent /* = nullptr */):
  QObject(parent),
  m_map(new Map(BasemapStyle::ArcGISOceans, this))
{
  Portal* portal = new Portal(this);
  m_portalItem = new PortalItem(portal, featureCollectionItemId, this);

  connect(m_portalItem, &PortalItem::doneLoading, this, [this](const Error& loadError)
  {
    if (!loadError.isEmpty())
    {
      qWarning() << loadError.message() << loadError.additionalMessage();
      return;
    }

    // if the portal item is a feature collection, add the feature collection to the map's operational layers
    if (m_portalItem->type() == PortalItemType::FeatureCollection)
    {
      FeatureCollection* featureCollection = new FeatureCollection(m_portalItem, this);
      FeatureCollectionLayer* featureCollectionLayer = new FeatureCollectionLayer(featureCollection, this);
      m_map->operationalLayers()->append(featureCollectionLayer);
    }
    else
    {
      qWarning() << "Portal item with ID " << featureCollectionItemId << " is not a feature collection.";
    }
  });

  m_portalItem->load();
}

FeatureCollectionLayerFromPortal::~FeatureCollectionLayerFromPortal() = default;

void FeatureCollectionLayerFromPortal::init()
{
  // Register the map view for QML
  qmlRegisterType<MapQuickView>("Esri.Samples", 1, 0, "MapView");
  qmlRegisterType<FeatureCollectionLayerFromPortal>("Esri.Samples", 1, 0, "FeatureCollectionLayerFromPortalSample");
}

MapQuickView* FeatureCollectionLayerFromPortal::mapView() const
{
  return m_mapView;
}

// Set the view (created in QML)
void FeatureCollectionLayerFromPortal::setMapView(MapQuickView* mapView)
{
  if (!mapView || mapView == m_mapView)
    return;

  m_mapView = mapView;
  m_mapView->setMap(m_map);

  emit mapViewChanged();
}

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

You can no longer sign into this site. Go to your ArcGIS portal or the ArcGIS Location Platform dashboard to perform management tasks.

Your ArcGIS portal

Create, manage, and access API keys and OAuth 2.0 developer credentials, hosted layers, and data services.

Your ArcGIS Location Platform dashboard

Manage billing, monitor service usage, and access additional resources.

Learn more about these changes in the What's new in Esri Developers June 2024 blog post.

Close