[sensorthings] Observation phenomenonTime can be a time instant

According to the specifications, an Observation phenomenonTime can
either be a period OR a time instant. Correctly handle instants
instead of returning null for the phenomenonTime
This commit is contained in:
Nyall Dawson 2024-03-26 14:34:13 +10:00
parent 02562d7b91
commit 2ad9065bea

View File

@ -527,7 +527,7 @@ bool QgsSensorThingsSharedData::processFeatureRequest( QString &nextPage, QgsFee
return QVariant(); return QVariant();
}; };
auto getDateTimeRange = []( const basic_json<> &json, const char *tag ) -> std::pair< QVariant, QVariant > auto getDateTimeRange = []( const basic_json<> &json, const char *tag, bool allowInstant = false ) -> std::pair< QVariant, QVariant >
{ {
if ( !json.contains( tag ) ) if ( !json.contains( tag ) )
return { QVariant(), QVariant() }; return { QVariant(), QVariant() };
@ -545,6 +545,11 @@ bool QgsSensorThingsSharedData::processFeatureRequest( QString &nextPage, QgsFee
QDateTime::fromString( rangeParts.at( 1 ), Qt::ISODateWithMs ) QDateTime::fromString( rangeParts.at( 1 ), Qt::ISODateWithMs )
}; };
} }
else if ( allowInstant )
{
const QDateTime instant = QDateTime::fromString( rangeString, Qt::ISODateWithMs );
return { instant, instant };
}
} }
return { QVariant(), QVariant() }; return { QVariant(), QVariant() };
@ -650,7 +655,7 @@ bool QgsSensorThingsSharedData::processFeatureRequest( QString &nextPage, QgsFee
case Qgis::SensorThingsEntity::Observation: case Qgis::SensorThingsEntity::Observation:
{ {
std::pair< QVariant, QVariant > phenomenonTime = getDateTimeRange( featureData, "phenomenonTime" ); std::pair< QVariant, QVariant > phenomenonTime = getDateTimeRange( featureData, "phenomenonTime", true );
std::pair< QVariant, QVariant > validTime = getDateTimeRange( featureData, "validTime" ); std::pair< QVariant, QVariant > validTime = getDateTimeRange( featureData, "validTime" );
feature.setAttributes( feature.setAttributes(
QgsAttributes() QgsAttributes()