QGIS API Documentation 3.36.0-Maidenhead (09951dc0acf)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
qgssensorthingsdataitems.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgssensorthingsdataitems.cpp
3 ---------------------
4 begin : December 2023
5 copyright : (C) 2023 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16#include "qgsprovidermetadata.h"
20#include "qgsdataprovider.h"
21#include "qgsproviderregistry.h"
22
24
25//
26// QgsSensorThingsRootItem
27//
28
29QgsSensorThingsRootItem::QgsSensorThingsRootItem( QgsDataItem *parent, QString name, QString path )
30 : QgsConnectionsRootItem( parent, name, path, QStringLiteral( "sensorthings" ) )
31{
32 mCapabilities |= Qgis::BrowserItemCapability::Fast;
33 mIconName = QStringLiteral( "mIconSensorThings.svg" );
34 populate();
35}
36
37QVector<QgsDataItem *> QgsSensorThingsRootItem::createChildren()
38{
39 QVector<QgsDataItem *> connections;
40 const auto connectionList = QgsSensorThingsProviderConnection::connectionList();
41 for ( const QString &connName : connectionList )
42 {
43 QgsDataItem *conn = new QgsSensorThingsConnectionItem( this, connName, mPath + '/' + connName );
44 connections.append( conn );
45 }
46 return connections;
47}
48
49//
50// QgsSensorThingsConnectionItem
51//
52
53QgsSensorThingsConnectionItem::QgsSensorThingsConnectionItem( QgsDataItem *parent, const QString &name, const QString &path )
54 : QgsDataCollectionItem( parent, name, path, QStringLiteral( "sensorthings" ) )
55 , mConnName( name )
56{
57 mIconName = QStringLiteral( "mIconConnect.svg" );
59 populate();
60
61
62}
63
64bool QgsSensorThingsConnectionItem::equal( const QgsDataItem *other )
65{
66 const QgsSensorThingsConnectionItem *o = qobject_cast<const QgsSensorThingsConnectionItem *>( other );
67 return ( type() == other->type() && o && mPath == o->mPath && mName == o->mName );
68}
69
70QVector<QgsDataItem *> QgsSensorThingsConnectionItem::createChildren()
71{
72 QVector<QgsDataItem *> children;
73
75 const QString uri = QgsSensorThingsProviderConnection::encodedLayerUri( connectionData );
76 const QVariantMap connectionUriParts = QgsProviderRegistry::instance()->decodeUri(
77 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, uri );
78
79 for ( Qgis::SensorThingsEntity entity :
80 {
89 } )
90 {
91 QVariantMap entityUriParts = connectionUriParts;
92 entityUriParts.insert( QStringLiteral( "entity" ), qgsEnumValueToKey( entity ) );
93
95 {
96 children.append( new QgsSensorThingsEntityContainerItem( this,
98 mPath + '/' + qgsEnumValueToKey( entity ),
100 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, entityUriParts ) ) );
101 }
102 else
103 {
104 children.append( new QgsSensorThingsLayerEntityItem( this,
106 mPath + '/' + qgsEnumValueToKey( entity ),
108 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, entityUriParts ),
109 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY,
111 }
112 }
113
114 return children;
115}
116
117
118//
119// QgsSensorThingsEntityContainerItem
120//
121
122QgsSensorThingsEntityContainerItem::QgsSensorThingsEntityContainerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &entityUri )
123 : QgsDataCollectionItem( parent, name, path, QStringLiteral( "sensorthings" ) )
124 , mEntityUri( entityUri )
125{
127 populate();
128}
129
130bool QgsSensorThingsEntityContainerItem::equal( const QgsDataItem *other )
131{
132 const QgsSensorThingsEntityContainerItem *o = qobject_cast<const QgsSensorThingsEntityContainerItem *>( other );
133 return ( type() == other->type() && o && mPath == o->mPath && mName == o->mName );
134}
135
136QVector<QgsDataItem *> QgsSensorThingsEntityContainerItem::createChildren()
137{
138 QVector<QgsDataItem *> children;
139
140 const QVariantMap entityUriParts = QgsProviderRegistry::instance()->decodeUri(
141 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, mEntityUri );
142
143 int sortKey = 1;
144 for ( const Qgis::WkbType wkbType :
145 {
150 } )
151 {
152 QVariantMap geometryUriParts = entityUriParts;
153 QString name;
155 switch ( wkbType )
156 {
158 geometryUriParts.insert( QStringLiteral( "geometryType" ), QStringLiteral( "point" ) );
159 name = tr( "Points" );
161 break;
163 geometryUriParts.insert( QStringLiteral( "geometryType" ), QStringLiteral( "multipoint" ) );
164 name = tr( "MultiPoints" );
166 break;
168 geometryUriParts.insert( QStringLiteral( "geometryType" ), QStringLiteral( "line" ) );
169 name = tr( "Lines" );
171 break;
173 geometryUriParts.insert( QStringLiteral( "geometryType" ), QStringLiteral( "polygon" ) );
174 name = tr( "Polygons" );
176 break;
177 default:
178 break;
179 }
180 children.append( new QgsSensorThingsLayerEntityItem( this,
181 name,
182 mPath + '/' + name,
184 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, geometryUriParts ),
185 QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY,
186 layerType ) );
187 children.last()->setSortKey( sortKey++ );
188 }
189
190 return children;
191}
192
193//
194// QgsSensorThingsLayerEntityItem
195//
196
197QgsSensorThingsLayerEntityItem::QgsSensorThingsLayerEntityItem( QgsDataItem *parent, QString name, QString path, const QString &encodedUri, const QString &provider, Qgis::BrowserLayerType type )
198 : QgsLayerItem( parent, name, path, encodedUri, type, provider )
199{
201}
202
203//
204// QgsSensorThingsDataItemProvider
205//
206
207QString QgsSensorThingsDataItemProvider::name()
208{
209 return QStringLiteral( "SensorThings" );
210}
211
212QString QgsSensorThingsDataItemProvider::dataProviderKey() const
213{
214 return QStringLiteral( "sensorthings" );
215}
216
217Qgis::DataItemProviderCapabilities QgsSensorThingsDataItemProvider::capabilities() const
218{
220}
221
222QgsDataItem *QgsSensorThingsDataItemProvider::createDataItem( const QString &path, QgsDataItem *parentItem )
223{
224 if ( path.isEmpty() )
225 return new QgsSensorThingsRootItem( parentItem, QObject::tr( "SensorThings" ), QStringLiteral( "sensorthings:" ) );
226
227 return nullptr;
228}
229
231
@ NetworkSources
Network/internet source.
@ Populated
Children created.
@ Collapse
The collapse/expand status for this items children should be ignored in order to avoid undesired netw...
@ Fast
CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms,...
SensorThingsEntity
OGC SensorThings API entity types.
Definition qgis.h:4803
@ Sensor
A Sensor is an instrument that observes a property or phenomenon with the goal of producing an estima...
@ ObservedProperty
An ObservedProperty specifies the phenomenon of an Observation.
@ FeatureOfInterest
In the context of the Internet of Things, many Observations’ FeatureOfInterest can be the Location of...
@ Datastream
A Datastream groups a collection of Observations measuring the same ObservedProperty and produced by ...
@ Observation
An Observation is the act of measuring or otherwise determining the value of a property.
@ Location
A Location entity locates the Thing or the Things it associated with. A Thing’s Location entity is de...
@ Thing
A Thing is an object of the physical world (physical things) or the information world (virtual things...
@ HistoricalLocation
A Thing’s HistoricalLocation entity set provides the times of the current (i.e., last known) and prev...
BrowserLayerType
Browser item layer types.
Definition qgis.h:736
@ Point
Vector point layer.
@ Line
Vector line layer.
@ Polygon
Vector polygon layer.
@ TableLayer
Vector non-spatial layer.
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:182
@ MultiPoint
MultiPoint.
@ MultiPolygon
MultiPolygon.
@ MultiLineString
MultiLineString.
A Collection that represents a root group of connections from a single data provider.
A Collection: logical collection of layers or subcollections, e.g.
Base class for all items in the model.
Definition qgsdataitem.h:46
Qgis::BrowserItemType type() const
Item that represents a layer that can be opened with one of the providers.
QVariantMap decodeUri(const QString &providerKey, const QString &uri)
Breaks a provider data source URI into its component paths (e.g.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
static QString encodedLayerUri(const Data &data)
Returns connection data encoded as a string containing a URI for a SensorThings vector data provider.
static QStringList connectionList()
Returns a list of the stored connection names.
static Data connection(const QString &name)
Returns connection details for the stored connection with the specified name.
static QString displayString(Qgis::SensorThingsEntity type, bool plural=false)
Converts a Qgis::SensorThingsEntity type to a user-friendly translated string.
static bool entityTypeHasGeometry(Qgis::SensorThingsEntity type)
Returns true if the specified entity type can have geometry attached.
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
Definition qgis.h:5335
Represents decoded data of a SensorThings connection.