diff --git a/spec/2a_features.adoc b/spec/2a_features.adoc index 71277cf6..76838d35 100644 --- a/spec/2a_features.adoc +++ b/spec/2a_features.adoc @@ -314,13 +314,12 @@ The geometry type of a feature geometry column specified in the `gpkg_geometry_c [caption=""] .Requirement 32 ==== -Feature table geometry columns SHALL contain geometries of the type or assignable for the type specified for the column by the `gpkg_geometry_columns` table `geometry_type_name` uppercase column value ^<>^ +Feature table geometry columns SHALL contain geometries of the type [line-through]#or assignable for the type# specified for the column by the `gpkg_geometry_columns` table `geometry_type_name` uppercase column value ^<>^. ==== -Geometry subtypes are assignable as defined in <> and shown in part in <>. -For example, if the `geometry_type_name` value in the `gpkg_geometry_columns` table is for a geometry type like POINT that has no subtypes, then the feature table geometry column MAY only contain geometries of that type. -If the geometry `type_name` value in the `gpkg_geometry_columns` table is for a geometry type like GEOMETRYCOLLECTION that has subtypes, then the feature table geometry column MAY only contain geometries of that type or any of its direct or indirect subtypes. -If the geometry `type_name` is GEOMETRY (the root of the geometry type hierarchy) then the feature table geometry column MAY contain geometries of any geometry type. +Allowed geometry types are defined in <> and shown in part in <>. +If the geometry `type_name` value is "GEOMETRY" then the feature table geometry column MAY contain geometries of any allowed geometry type. +If the geometry `type_name` value is "GEOMETRYCOLLECTION" then the feature table geometry column MAY contain zero or more geometries of any allowed geometry type. The presence or absence of optional elevation (Z) and/or measure (M) values in a geometry does not change its type or assignability. The unit of measure for optional elevation(Z) values is determined by the CRS of the geometry; it is as-defined by a 3D CRS, and undefined for a 2D CRS. The unit of measure for optional measure (M) values is determined by the CRS of the geometry. diff --git a/spec/annexes/ats.adoc b/spec/annexes/ats.adoc index 49f7eed7..bfc54d62 100644 --- a/spec/annexes/ats.adoc +++ b/spec/annexes/ats.adoc @@ -494,15 +494,15 @@ FROM gpkg_geometry_columns WHERE table_name IN [cols="1,5a"] |======================================== |*Test Case ID* |+/opt/features/vector_features/data/data_values_geometry_type+ -|*Test Purpose* |Verify that the geometry type of feature geometries are of the type or are assignable for the geometry type specified by the `gpkg_geometry` columns table `geometry_type_name` column value. +|*Test Purpose* |Verify that the geometry type of feature geometries are of the type specified by the `gpkg_geometry` columns table `geometry_type_name` column value. |*Test Method* | . SELECT table_name AS tn, column_name AS cn, geometry_type_name AS gt_name FROM gpkg_geometry_columns WHERE table_name IN (SELECT table_name FROM gpkg_contents WHERE data_type = 'features') . Not testable if returns an empty result set . For each row from step 1 -.. *Select the set of geometry types in use for the values in cn +.. Select the set of geometry types in use for the values in cn .. For each row actual_type_name from step a -... *Determine if each geometry type is assignable to the actual_type_name -... Fail if any are not assignable +... Determine if each geometry type matches the actual_type_name +... Fail if any geometries do not match . Pass if no fails |*Reference* |Clause 2.1.6.1.2 Req 32: |*Test Type* |Capability