@@ -1601,6 +1601,79 @@ def test_ogr_gpkg_srs_non_consistent_with_official_definition():
16011601 gdal .Unlink ('/vsimem/ogr_gpkg_20.gpkg' )
16021602
16031603
1604+ def test_ogr_gpkg_write_srs_undefined_geographic ():
1605+
1606+ gdal .Unlink ('tmp/ogr_gpkg_srs_undefined_geographic.gpkg' )
1607+
1608+ gpkg_ds = gdaltest .gpkg_dr .CreateDataSource ('tmp/ogr_gpkg_srs_undefined_geographic.gpkg' )
1609+ assert gpkg_ds is not None
1610+
1611+ # Check initial default SRS entries in gpkg_spatial_ref_sys
1612+ sql_lyr = gpkg_ds .ExecuteSQL ("SELECT COUNT(*) FROM gpkg_spatial_ref_sys" )
1613+ gpkg_spatial_ref_sys_total = sql_lyr .GetNextFeature ().GetField (0 )
1614+ assert gpkg_spatial_ref_sys_total == 3 # entries with SRS IDs: -1, 0, 4326
1615+ gpkg_ds .ReleaseResultSet (sql_lyr )
1616+
1617+ srs = osr .SpatialReference ()
1618+ srs .SetFromUserInput ('GEOGCS["Undefined geographic SRS",DATUM["unknown",SPHEROID["unknown",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST]]' )
1619+ lyr = gpkg_ds .CreateLayer ('srs_test_geographic_layer' , geom_type = ogr .wkbPoint , srs = srs )
1620+ srs_wkt = lyr .GetSpatialRef ().ExportToWkt ()
1621+ assert srs_wkt .find ('Undefined geographic SRS' ) >= 0 , srs_wkt
1622+ assert lyr .GetSpatialRef ().IsGeographic ()
1623+
1624+ gpkg_ds = None
1625+ gpkg_ds = ogr .Open ('tmp/ogr_gpkg_srs_undefined_geographic.gpkg' )
1626+
1627+ # Check no new SRS entries have been inserted into gpkg_spatial_ref_sys
1628+ sql_lyr = gpkg_ds .ExecuteSQL ("SELECT COUNT(*) FROM gpkg_spatial_ref_sys" )
1629+ assert gpkg_spatial_ref_sys_total == sql_lyr .GetNextFeature ().GetField (0 )
1630+ gpkg_ds .ReleaseResultSet (sql_lyr )
1631+
1632+ lyr = gpkg_ds .GetLayer (0 )
1633+ srs_wkt = lyr .GetSpatialRef ().ExportToWkt ()
1634+ assert srs_wkt .find ('Undefined geographic SRS' ) >= 0 , srs_wkt
1635+ assert lyr .GetSpatialRef ().IsGeographic ()
1636+
1637+ gpkg_ds = None
1638+ gdal .Unlink ('tmp/ogr_gpkg_srs_undefined_geographic.gpkg' )
1639+
1640+
1641+ def test_ogr_gpkg_write_srs_undefined_cartesian ():
1642+
1643+ gdal .Unlink ('tmp/ogr_gpkg_srs_cartesian.gpkg' )
1644+
1645+ gpkg_ds = gdaltest .gpkg_dr .CreateDataSource ('tmp/ogr_gpkg_srs_cartesian.gpkg' )
1646+ assert gpkg_ds is not None
1647+
1648+ # Check initial default SRS entries in gpkg_spatial_ref_sys
1649+ sql_lyr = gpkg_ds .ExecuteSQL ("SELECT COUNT(*) FROM gpkg_spatial_ref_sys" )
1650+ gpkg_spatial_ref_sys_total = sql_lyr .GetNextFeature ().GetField (0 )
1651+ assert gpkg_spatial_ref_sys_total == 3 # SRS with IDs: -1, 0, 4326
1652+ gpkg_ds .ReleaseResultSet (sql_lyr )
1653+
1654+ srs = osr .SpatialReference ()
1655+ srs .SetFromUserInput ('LOCAL_CS["Undefined cartesian SRS"]' )
1656+ lyr = gpkg_ds .CreateLayer ('srs_test_cartesian_layer' , geom_type = ogr .wkbPoint , srs = srs )
1657+ srs_wkt = lyr .GetSpatialRef ().ExportToWkt ()
1658+ assert srs_wkt .find ('Undefined cartesian SRS' ) >= 0
1659+ assert lyr .GetSpatialRef ().IsLocal ()
1660+
1661+ gpkg_ds = None
1662+ gpkg_ds = ogr .Open ('tmp/ogr_gpkg_srs_cartesian.gpkg' )
1663+
1664+ # Check no new SRS entries have been inserted into gpkg_spatial_ref_sys
1665+ sql_lyr = gpkg_ds .ExecuteSQL ("SELECT COUNT(*) FROM gpkg_spatial_ref_sys" )
1666+ assert gpkg_spatial_ref_sys_total == sql_lyr .GetNextFeature ().GetField (0 )
1667+ gpkg_ds .ReleaseResultSet (sql_lyr )
1668+
1669+ lyr = gpkg_ds .GetLayer (0 )
1670+ srs_wkt = lyr .GetSpatialRef ().ExportToWkt ()
1671+ assert srs_wkt .find ('Undefined cartesian SRS' ) >= 0 , srs_wkt
1672+ assert lyr .GetSpatialRef ().IsLocal ()
1673+
1674+ gpkg_ds = None
1675+ gdal .Unlink ('tmp/ogr_gpkg_srs_cartesian.gpkg' )
1676+
16041677###############################################################################
16051678# Test maximum width of text fields
16061679
0 commit comments