File tree Expand file tree Collapse file tree 3 files changed +44
-0
lines changed Expand file tree Collapse file tree 3 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -3534,3 +3534,35 @@ def test_ogr_gmlas_citygml_lod2_no_schema_location():
3534
3534
pytest .skip (f"cannot open { url } " )
3535
3535
3536
3536
assert ds .GetLayerCount () == 1537
3537
+
3538
+
3539
+ ###############################################################################
3540
+
3541
+
3542
+ @pytest .mark .require_curl ()
3543
+ def test_ogr_gmlas_datetime (tmp_vsimem ):
3544
+
3545
+ ds = ogr .Open ("GMLAS:data/gml/datetime.gml" )
3546
+ lyr = ds .GetLayer ("test" )
3547
+ f = lyr .GetNextFeature ()
3548
+ lyr_defn = lyr .GetLayerDefn ()
3549
+ assert (
3550
+ lyr_defn .GetFieldDefn (lyr_defn .GetFieldIndex ("time" )).GetType () == ogr .OFTTime
3551
+ )
3552
+ assert f ["time" ] == "23:59:60"
3553
+ assert (
3554
+ lyr_defn .GetFieldDefn (lyr_defn .GetFieldIndex ("date" )).GetType () == ogr .OFTDate
3555
+ )
3556
+ assert f ["date" ] == "9999/12/31"
3557
+ assert (
3558
+ lyr_defn .GetFieldDefn (lyr_defn .GetFieldIndex ("datetime" )).GetType ()
3559
+ == ogr .OFTDateTime
3560
+ )
3561
+ assert f ["datetime" ] == "9999/12/31 23:59:60.999"
3562
+ assert (
3563
+ lyr_defn .GetFieldDefn (
3564
+ lyr_defn .GetFieldIndex ("dtintimeposition_timeposition" )
3565
+ ).GetType ()
3566
+ == ogr .OFTDateTime
3567
+ )
3568
+ assert f ["dtintimeposition_timeposition" ] == "9999/12/31 23:59:60.999"
Original file line number Diff line number Diff line change @@ -268,6 +268,7 @@ STRING_CONST(szXS_GYEAR, "gYear");
268
268
STRING_CONST (szXS_GYEAR_MONTH, " gYearMonth" );
269
269
STRING_CONST (szXS_TIME, " time" );
270
270
STRING_CONST (szXS_DATETIME, " dateTime" );
271
+ STRING_CONST (szXS_TIME_INSTANT_TYPE, " TimeInstantType" );
271
272
STRING_CONST (szXS_ANY_URI, " anyURI" );
272
273
STRING_CONST (szXS_ANY_TYPE, " anyType" );
273
274
STRING_CONST (szXS_ANY_SIMPLE_TYPE, " anySimpleType" );
Original file line number Diff line number Diff line change @@ -3344,9 +3344,19 @@ bool GMLASSchemaAnalyzer::ExploreModelGroup(
3344
3344
3345
3345
const std::vector<GMLASField> &osNestedClassFields =
3346
3346
oNestedClass.GetFields ();
3347
+ const bool bIsTimeInstantType =
3348
+ transcode (poTypeDef->getName ()) ==
3349
+ szXS_TIME_INSTANT_TYPE;
3347
3350
for (size_t j = 0 ; j < osNestedClassFields.size (); j++)
3348
3351
{
3349
3352
GMLASField oField (osNestedClassFields[j]);
3353
+ if (bIsTimeInstantType &&
3354
+ oField.GetType () == GMLAS_FT_ANYSIMPLETYPE &&
3355
+ oField.GetName () == " timePosition" )
3356
+ {
3357
+ oField.SetType (GMLAS_FT_DATETIME,
3358
+ szXS_DATETIME);
3359
+ }
3350
3360
oField.SetName (osPrefixedEltName + " _" +
3351
3361
oField.GetName ());
3352
3362
if (nMinOccurs == 0 ||
@@ -3356,6 +3366,7 @@ bool GMLASSchemaAnalyzer::ExploreModelGroup(
3356
3366
oField.SetMinOccurs (0 );
3357
3367
oField.SetNotNullable (false );
3358
3368
}
3369
+
3359
3370
aoFields.push_back (std::move (oField));
3360
3371
}
3361
3372
You can’t perform that action at this time.
0 commit comments