mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-30 00:29:39 -05:00
Add method to convert QVariant to OGRField
This commit is contained in:
parent
eaba5b3efd
commit
44844bc736
@ -184,6 +184,71 @@ QVariant QgsOgrUtils::OGRFieldtoVariant( const OGRField *value, OGRFieldType typ
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
std::unique_ptr< OGRField > QgsOgrUtils::variantToOGRField( const QVariant &value )
|
||||
{
|
||||
std::unique_ptr< OGRField > res = std::make_unique< OGRField >();
|
||||
|
||||
switch ( value.type() )
|
||||
{
|
||||
case QVariant::Invalid:
|
||||
OGR_RawField_SetUnset( res.get() );
|
||||
break;
|
||||
case QVariant::Bool:
|
||||
res->Integer = value.toBool() ? 1 : 0;
|
||||
break;
|
||||
case QVariant::Int:
|
||||
res->Integer = value.toInt();
|
||||
break;
|
||||
case QVariant::LongLong:
|
||||
res->Integer64 = value.toLongLong();
|
||||
break;
|
||||
case QVariant::Double:
|
||||
res->Real = value.toDouble();
|
||||
break;
|
||||
case QVariant::Char:
|
||||
case QVariant::String:
|
||||
res->String = CPLStrdup( value.toString().toUtf8().constData() );
|
||||
break;
|
||||
case QVariant::Date:
|
||||
{
|
||||
const QDate date = value.toDate();
|
||||
res->Date.Day = date.day();
|
||||
res->Date.Month = date.month();
|
||||
res->Date.Year = date.year();
|
||||
res->Date.TZFlag = 0;
|
||||
break;
|
||||
}
|
||||
case QVariant::Time:
|
||||
{
|
||||
const QTime time = value.toTime();
|
||||
res->Date.Hour = time.hour();
|
||||
res->Date.Minute = time.minute();
|
||||
res->Date.Second = time.second() + static_cast< double >( time.msec() ) / 1000;
|
||||
res->Date.TZFlag = 0;
|
||||
break;
|
||||
}
|
||||
case QVariant::DateTime:
|
||||
{
|
||||
const QDateTime dateTime = value.toDateTime();
|
||||
res->Date.Day = dateTime.date().day();
|
||||
res->Date.Month = dateTime.date().month();
|
||||
res->Date.Year = dateTime.date().year();
|
||||
res->Date.Hour = dateTime.time().hour();
|
||||
res->Date.Minute = dateTime.time().minute();
|
||||
res->Date.Second = dateTime.time().second() + static_cast< double >( dateTime.time().msec() ) / 1000;
|
||||
res->Date.TZFlag = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
QgsDebugMsg( "Unhandled variant type in variantToOGRField" );
|
||||
OGR_RawField_SetUnset( res.get() );
|
||||
break;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
QgsFeature QgsOgrUtils::readOgrFeature( OGRFeatureH ogrFet, const QgsFields &fields, QTextCodec *encoding )
|
||||
{
|
||||
QgsFeature feature;
|
||||
|
||||
@ -173,6 +173,13 @@ class CORE_EXPORT QgsOgrUtils
|
||||
*/
|
||||
static QVariant OGRFieldtoVariant( const OGRField *value, OGRFieldType type );
|
||||
|
||||
/**
|
||||
* Converts a QVariant to an OGRField value.
|
||||
*
|
||||
* \since QGIS 3.26
|
||||
*/
|
||||
static std::unique_ptr<OGRField> variantToOGRField( const QVariant &value );
|
||||
|
||||
/**
|
||||
* Reads an OGR feature and converts it to a QgsFeature.
|
||||
* \param ogrFet OGR feature handle
|
||||
|
||||
@ -65,6 +65,7 @@ class TestQgsOgrUtils: public QObject
|
||||
void convertStyleString();
|
||||
void ogrCrsConversion();
|
||||
void ogrFieldToVariant();
|
||||
void variantToOgrField();
|
||||
void testOgrFieldTypeToQVariantType_data();
|
||||
void testOgrFieldTypeToQVariantType();
|
||||
void testVariantTypeToOgrFieldType_data();
|
||||
@ -813,6 +814,31 @@ void TestQgsOgrUtils::ogrFieldToVariant()
|
||||
OGR_DS_Destroy( hDS );
|
||||
}
|
||||
|
||||
void TestQgsOgrUtils::variantToOgrField()
|
||||
{
|
||||
std::unique_ptr<OGRField> field( QgsOgrUtils::variantToOGRField( QVariant() ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTInteger ), QVariant() );
|
||||
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( true ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTInteger ), QVariant( 1 ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( false ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTInteger ), QVariant( 0 ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( 11 ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTInteger ), QVariant( 11 ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( 11LL ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTInteger64 ), QVariant( 11LL ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( 5.5 ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTReal ), QVariant( 5.5 ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( QStringLiteral( "abc" ) ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTString ), QVariant( QStringLiteral( "abc" ) ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( QDate( 2021, 2, 3 ) ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTDate ), QVariant( QDate( 2021, 2, 3 ) ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( QTime( 12, 13, 14, 50 ) ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTTime ), QVariant( QTime( 12, 13, 14, 50 ) ) );
|
||||
field = QgsOgrUtils::variantToOGRField( QVariant( QDateTime( QDate( 2021, 2, 3 ), QTime( 12, 13, 14, 50 ) ) ) );
|
||||
QCOMPARE( QgsOgrUtils::OGRFieldtoVariant( field.get(), OFTDateTime ), QVariant( QDateTime( QDate( 2021, 2, 3 ), QTime( 12, 13, 14, 50 ) ) ) );
|
||||
}
|
||||
|
||||
void TestQgsOgrUtils::testOgrFieldTypeToQVariantType_data()
|
||||
{
|
||||
QTest::addColumn<int>( "ogrType" );
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user