Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

st_read reads compressed GPKG (>= GDAL 3.7) - should this be advertised? #2433

Open
rsbivand opened this issue Sep 4, 2024 · 4 comments
Open

Comments

@rsbivand
Copy link
Member

rsbivand commented Sep 4, 2024

@Nowosad I've been looking at reading compressed vector files, such as this:
GB_election_2024_sim.gpkg.zip

In terra:

> xx <- terra::vect("GB_election_2024_sim.gpkg.zip")
> xx
 class       : SpatVector 
 geometry    : polygons 
 dimensions  : 632, 19  (geometries, attributes)
 extent      : 5512.998, 655970.4, 5342.9, 1220287  (xmin, xmax, ymin, ymax)
 source      : GB_election_2024_sim.gpkg.zip (GB_election_2024_sim)
 coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
 names       :     Constituency            Name Area_Code Area_Description
 type        :            <chr>           <chr>     <chr>            <chr>
 values      : Aberafan Maesteg Aberafan Maest~       WMC  Westminster Co~
                 Aberdeen North Aberdeen North~       WMC  Westminster Co~
                 Aberdeen South Aberdeen South~       WMC  Westminster Co~
       File_Name Feature_Serial_Number Collection_Serial_Number
           <chr>                 <int>                    <int>
 ABERAFAN_MAEST~                     1                        1
 ABERDEEN_NORTH~                   472                      472
 ABERDEEN_SOUTH~                   473                      473
 Global_Polygon_ID Admin_Unit_ID Census_Code (and 9 more)
             <int>         <int>       <chr>             
            146759        187003   W07000081             
            147374        187618   S14000060             
            147375        187619   S14000061        

In sf:

> sim <- st_read("GB_election_2024_sim.gpkg.zip")
Reading layer `GB_election_2024_sim' from data source 
  `/home/rsb/topics/packages/github-r-spatial/LICD/GB_election_2024_sim.gpkg.zip' 
  using driver `GPKG'
Simple feature collection with 632 features and 19 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 5512.998 ymin: 5342.9 xmax: 655970.4 ymax: 1220287
Projected CRS: OSGB36 / British National Grid
> all.equal(st_geometry(sim), st_geometry(st_cast(st_as_sf(xx), "MULTIPOLYGON")))
[1] TRUE
> all.equal(st_drop_geometry(sim), st_drop_geometry(st_as_sf(xx)))
[1] TRUE

Could we compress the GPKG in spData see Nowosad/spData#62 ? Or are too many using GDAL < 3.7 ? This actually also works from GDAL >= 3.1 for ESRI Shapefiles too.

@Nowosad
Copy link
Contributor

Nowosad commented Sep 9, 2024

@rsbivand GDAL 3.7 was just released less than 1.5 years ago. Thus, my feeling is that it is too early to expect the majority of the users to have it...

@rsbivand
Copy link
Member Author

rsbivand commented Sep 9, 2024

OK, it does save a lot (~50%) on installed size. CRAN Windows and macOS are OK, current Fedora also, Ubuntu GH actions OK, CRAN Fedora devel checks not OK, because Fedora is still 36, so GDAL 3.4. CRAN macOS checks not OK 3.5 on both architectures. I'll see how to move CRAN forward, at least for feasible check platforms, with the benefit of smaller installed sizes for vector files.

@rsbivand
Copy link
Member Author

GDAL37 <- as.numeric_version(unname(sf_extSoftVersion()["GDAL"])) >= "3.7.0"
file <- "aa.gpkg.zip"
zipfile <- system.file(file, package="aaa")
if (GDAL37) {
    out <- st_read(zipfile)
} else {
    td <- tempdir()
    bn <- sub(".zip", "", basename(file))
    target <- unzip(zipfile, files=bn, exdir=td)
    out <- st_read(target)
}

@rouault
Copy link
Contributor

rouault commented Oct 5, 2024

Reading zipped geopackage is supported by GDAL since forever. GDAL 3.7 just brings a bit of syntaxic sugar on opening (and direct creation of a .gpkg.zip). For all versions, you can open "/vsizip/GB_election_2024_sim.gpkg.zip/GB_election_2024_sim.gpkg" . Cf logic at https://github.com/OSGeo/gdal/blob/d09bdd06b5b0753b0ae743f531a672259eb9dae5/ogr/ogrsf_frmts/gpkg/ogrgeopackagedriver.cpp#L63 and https://github.com/OSGeo/gdal/blob/d09bdd06b5b0753b0ae743f531a672259eb9dae5/ogr/ogrsf_frmts/gpkg/ogrgeopackagedatasource.cpp#L1438

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants