[OGC API provider] Implement geometryColumnName() when Part 5 is available

This commit is contained in:
Even Rouault 2025-03-17 20:51:26 +01:00 committed by Nyall Dawson
parent a57ceb0392
commit 19451dd2a7
5 changed files with 14 additions and 0 deletions

View File

@ -501,6 +501,8 @@ bool QgsOapifProvider::empty() const
return !getFeatures( request ).nextFeature( f );
};
QString QgsOapifProvider::geometryColumnName() const { return mShared->mGeometryColumnName; }
bool QgsOapifProvider::setSubsetString( const QString &filter, bool updateFeatureCount )
{
QgsDebugMsgLevel( QStringLiteral( "filter = '%1'" ).arg( filter ), 4 );
@ -588,6 +590,7 @@ void QgsOapifProvider::handleGetSchemaRequest( const QString &schemaUrl )
if ( schemaRequest.errorCode() == QgsBaseNetworkRequest::NoError )
{
mShared->mFields = schema.mFields;
mShared->mGeometryColumnName = schema.mGeometryColumnName;
if ( schema.mWKBType != Qgis::WkbType::Unknown )
mShared->mWKBType = schema.mWKBType;
}

View File

@ -81,6 +81,8 @@ class QgsOapifProvider final : public QgsVectorDataProvider
bool empty() const override;
QString geometryColumnName() const override;
enum class FilterTranslationState
{
FULLY_CLIENT,
@ -211,6 +213,9 @@ class QgsOapifSharedData final : public QObject, public QgsBackgroundCachedShare
//! Server filter
QString mServerFilter;
//! Geometry column name
QString mGeometryColumnName;
//! Translation state of filter to server-side filter.
QgsOapifProvider::FilterTranslationState mFilterTranslationState = QgsOapifProvider::FilterTranslationState::FULLY_CLIENT;

View File

@ -206,6 +206,7 @@ void QgsOapifSchemaRequest::processReply()
{
if ( QString::fromStdString( jOgcRole.get<std::string>() ) == QLatin1String( "primary-geometry" ) )
{
mSchema.mGeometryColumnName = QString::fromStdString( key );
mSchema.mWKBType = Qgis::WkbType::Unknown;
if ( val.contains( "format" ) )
{

View File

@ -36,6 +36,9 @@ class QgsOapifSchemaRequest : public QgsBaseNetworkRequest
//! Fields
QgsFields mFields;
QString mGeometryColumnName;
//! Geometry column name;
//! Geometry type;
Qgis::WkbType mWKBType = Qgis::WkbType::NoGeometry;
};

View File

@ -2912,6 +2912,8 @@ class TestPyQgsOapifProvider(QgisTestCase, ProviderTestCase):
]
self.assertEqual(values, [["feat.1", "foo", 1, 1.25, True]])
self.assertEqual(vl.dataProvider().geometryColumnName(), "geometry")
def _testPart5SchemaSingleOrMulti(
self, geometryFormat, geojsonGeom, expectedWkbType, expectedWkt
):