Feature collection layer (query)

Loading

Code

#include "FeatureCollectionLayerQuery.h"

#include "FeatureCollection.h"
#include "FeatureCollectionLayer.h"
#include "FeatureCollectionTable.h"
#include "Map.h"
#include "MapQuickView.h"
#include "ServiceFeatureTable.h"

#include <QString>

using namespace Esri::ArcGISRuntime;

FeatureCollectionLayerQuery::FeatureCollectionLayerQuery(QQuickItem* parent /* = nullptr */):
  QQuickItem(parent)
{
}

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

bool FeatureCollectionLayerQuery::busy() const
{
  return m_busy;
}

void FeatureCollectionLayerQuery::setBusy(bool val)
{
  if (val == m_busy)
    return;

  m_busy = val;
  emit busyChanged();
}

void FeatureCollectionLayerQuery::componentComplete()
{
  QQuickItem::componentComplete();

  // find QML MapView component
  m_mapView = findChild<MapQuickView*>("mapView");

  // Create a map using the oceans basemap
  m_map = new Map(Basemap::oceans(this), this);

  // Set map to map view
  m_mapView->setMap(m_map);

  //initialize service feature table to be queried
  m_featureTable = new ServiceFeatureTable(QUrl(QStringLiteral("http://sampleserver6.arcgisonline.com/arcgis/rest/services/Wildfire/FeatureServer/0")), this);

  //create query parameters
  QueryParameters queryParams;

  // 1=1 will give all the features from the table
  queryParams.setWhereClause("1=1");

  connect(m_featureTable, &ServiceFeatureTable::queryFeaturesCompleted, this, [this](QUuid, FeatureQueryResult* featureQueryResult)
  {
    setBusy(false);

    if (!featureQueryResult)
      return;

    //create a feature collection table fromt the query results
    FeatureCollectionTable* featureCollectionTable = new FeatureCollectionTable(featureQueryResult, this);

    //create a feature collection from the above feature collection table
    FeatureCollection* featureCollection = new FeatureCollection(QList<FeatureCollectionTable*> {featureCollectionTable}, this);

    //create a feature collection layer
    FeatureCollectionLayer* featureCollectionLayer = new FeatureCollectionLayer(featureCollection, this);

    //add the layer to the operational layers array
    m_map->operationalLayers()->append(featureCollectionLayer);
  });

  m_featureTable->queryFeatures(queryParams);
  setBusy(true);
}


In this topic
  1. Code