From 4cd4a0d518579c21bab82d2cf183c7f4031428fe Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 31 Jan 2025 12:31:02 +1000 Subject: [PATCH] [sensorthings] Offer geometry for Datastream entities (note that I cannot find any public servers which support this without errors!) Fixes #59525 --- .../providers/sensorthings/qgssensorthingsdataitems.cpp | 4 ++-- src/core/providers/sensorthings/qgssensorthingsutils.cpp | 6 +++--- .../providers/sensorthings/qgssensorthingssourcewidget.cpp | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp b/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp index 7217a9d1c90a..108870fdefd1 100644 --- a/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp +++ b/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp @@ -155,10 +155,10 @@ QVector QgsSensorThingsEntityContainerItem::createChildren() compatibleTypes << Qgis::WkbType::MultiPolygon << Qgis::WkbType::NoGeometry; break; case Qgis::GeometryType::Unknown: - compatibleTypes << Qgis::WkbType::Point << Qgis::WkbType::MultiPoint << Qgis::WkbType::MultiLineString << Qgis::WkbType::MultiPolygon; + compatibleTypes << Qgis::WkbType::Point << Qgis::WkbType::MultiPoint << Qgis::WkbType::MultiLineString << Qgis::WkbType::MultiPolygon << Qgis::WkbType::NoGeometry; break; case Qgis::GeometryType::Null: - compatibleTypes << Qgis::WkbType::NoGeometry;; + compatibleTypes << Qgis::WkbType::NoGeometry; } for ( const Qgis::WkbType wkbType : std::as_const( compatibleTypes ) ) diff --git a/src/core/providers/sensorthings/qgssensorthingsutils.cpp b/src/core/providers/sensorthings/qgssensorthingsutils.cpp index fa92c1a2041d..9c88b2c0f239 100644 --- a/src/core/providers/sensorthings/qgssensorthingsutils.cpp +++ b/src/core/providers/sensorthings/qgssensorthingsutils.cpp @@ -607,7 +607,6 @@ QString QgsSensorThingsUtils::geometryFieldForEntityType( Qgis::SensorThingsEnti case Qgis::SensorThingsEntity::Invalid: case Qgis::SensorThingsEntity::Thing: case Qgis::SensorThingsEntity::HistoricalLocation: - case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::Sensor: case Qgis::SensorThingsEntity::Observation: case Qgis::SensorThingsEntity::ObservedProperty: @@ -619,6 +618,7 @@ QString QgsSensorThingsUtils::geometryFieldForEntityType( Qgis::SensorThingsEnti case Qgis::SensorThingsEntity::FeatureOfInterest: return QStringLiteral( "feature" ); + case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::MultiDatastream: return QStringLiteral( "observedArea" ); } @@ -632,12 +632,12 @@ bool QgsSensorThingsUtils::entityTypeHasGeometry( Qgis::SensorThingsEntity type case Qgis::SensorThingsEntity::Invalid: case Qgis::SensorThingsEntity::Thing: case Qgis::SensorThingsEntity::HistoricalLocation: - case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::Sensor: case Qgis::SensorThingsEntity::Observation: case Qgis::SensorThingsEntity::ObservedProperty: return false; + case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::Location: case Qgis::SensorThingsEntity::FeatureOfInterest: case Qgis::SensorThingsEntity::MultiDatastream: @@ -653,12 +653,12 @@ Qgis::GeometryType QgsSensorThingsUtils::geometryTypeForEntity( Qgis::SensorThin case Qgis::SensorThingsEntity::Invalid: case Qgis::SensorThingsEntity::Thing: case Qgis::SensorThingsEntity::HistoricalLocation: - case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::Sensor: case Qgis::SensorThingsEntity::Observation: case Qgis::SensorThingsEntity::ObservedProperty: return Qgis::GeometryType::Null; + case Qgis::SensorThingsEntity::Datastream: case Qgis::SensorThingsEntity::Location: case Qgis::SensorThingsEntity::FeatureOfInterest: return Qgis::GeometryType::Unknown; diff --git a/src/gui/providers/sensorthings/qgssensorthingssourcewidget.cpp b/src/gui/providers/sensorthings/qgssensorthingssourcewidget.cpp index 0438dde67ebf..54a7a7fe4fd8 100644 --- a/src/gui/providers/sensorthings/qgssensorthingssourcewidget.cpp +++ b/src/gui/providers/sensorthings/qgssensorthingssourcewidget.cpp @@ -380,6 +380,7 @@ void QgsSensorThingsSourceWidget::setCurrentEntityType( Qgis::SensorThingsEntity mComboGeometryType->addItem( QgsIconUtils::iconForWkbType( Qgis::WkbType::MultiPoint ), tr( "Multipoint" ), QVariant::fromValue( Qgis::WkbType::MultiPoint ) ); mComboGeometryType->addItem( QgsIconUtils::iconForWkbType( Qgis::WkbType::MultiLineString ), tr( "Line" ), QVariant::fromValue( Qgis::WkbType::MultiLineString ) ); mComboGeometryType->addItem( QgsIconUtils::iconForWkbType( Qgis::WkbType::MultiPolygon ), tr( "Polygon" ), QVariant::fromValue( Qgis::WkbType::MultiPolygon ) ); + mComboGeometryType->addItem( QgsIconUtils::iconForWkbType( Qgis::WkbType::NoGeometry ), tr( "No Geometry" ), QVariant::fromValue( Qgis::WkbType::NoGeometry ) ); setCurrentGeometryTypeFromString( mSourceParts.value( QStringLiteral( "geometryType" ) ).toString() ); } else if ( geometryTypeForEntity == Qgis::GeometryType::Null && mComboGeometryType->findData( QVariant::fromValue( Qgis::WkbType::NoGeometry ) ) < 0 )