Major cleanup and more consistent use of internal SQLiteConnection usage to ensure open connections don’t get garbage collected
Added gpkg_disconnect()
convenience methods for
tbl_SQLiteConnection
and
src_SQLiteConnection
Added gpkg_connection()
a user-level function for
accessing or creating SQLiteConnections given a geopackage
object or a path to GeoPackage file
Added [
and [[
methods for
accessing/replacing tables in a geopackage
object
Replaced vapour
functionality for driver detection
with gdalraster
equivalents
Added gpkg()
alias for
geopackage()
Added gpkg_create_geometry_columns()
,
gpkg_geometry_columns()
and
gpkg_add_geometry_columns()
Added gpkg_sf()
convenience method for creating an
sf object from tables. Defaults to a sf
tbl_df, use as_tibble=FALSE
for
data.frame.
Now using new gpkg_create_spatial_ref_sys()
function
internally to ensure GeoPackages have the minimum required
tables
gpkg_collect()
and
gpkg_table(collect=TRUE)
gain support for selecting a
subset of columns of interest
Deprecate gpkg_create_dummy_features()
function name
and replace with gpkg_create_empty_features()
Deprecate gpkg_contents(template=)
argument, provide
new arguments for each data element (SRS ID and bounding box)
Implemented GDAL driver detection for file paths via {vapour} for #15
Implemented functions for creating
gpkg_spatial_ref_sys
table and adding or removing spatial
reference system records:
gpkg_create_spatial_ref_sys()
,
gpkg_add_spatial_ref_sys()
gpkg_delete_spatial_ref_sys()
,
gpkg_list_srs()
Implemented basic gpkg_validate()
routine (will be
expanded)
gpkg_contents
and
gpkg_spatial_ref_sys
existgpkg_contents
Added gpkg_create_spatial_view()
for creating
spatial views, which are dynamic layers accessible as if they were
typical static geometry layers (for #6).
gpkg_write()
now properly writing attributes from a
data.frame source (which is not nested in a list) when
table_name
argument is
gpkg_tables()
better handling for
terra::vect()
failures with non-spatial table function
fallback.
gpkg_write()
now can handle SpatVectorProxy
input by querying it. Note this will not work for data that will not fit
in memory. May try to implement an ogr2ogr-like interface for this in
the future (#15).
gpkg_bbox()
as an application of
gpkg_ogr_query()
geopackage()
internal connection object has been
moved to an internal environment
(<geopackage>$env$con
rather than
<geopackage>$con
)
gpkg_connect()
allows for in-place modification of
an existing object for the purposes of creating an internal
SQLiteConnection
Improvement to gpkg_add_contents()
and
gpkg_update_contents()
: more intelligent choice of data
type when heterogeneous (non-attribute) data are in database but not
registered. Fix for broken tests on Windows/GDAL 3.5.2.
Fixed bug in gpkg_tables()
when multiple attribute
tables were present.
Added gpkg_ogr_query()
(and ogr
argument to gpkg_query()
) to support querying OGR data
sources using a ‘terra’ SpatVectorProxy back end. This allows
for use of GeoPackage-specific SQL functions and the OGR/SQLite
dialects: https://gdal.org/en/stable/user/sql_sqlite_dialect.html
and https://gdal.org/en/stable/user/ogr_sql_dialect.html;
requires latest ‘terra’ (1.7-33+)
Added gpkg_rast()
(analog of
gpkg_vect()
for terra::rast()
) for lazy
manipulation of gridded data in a GeoPackage
Added gpkg_create_dummy_features()
which is a
workaround for use of gpkg_vect()
on a GeoPackage with only
attribute data. This creates innocuous entries in
gpkg_geometry_columns
and an empty table to “trick” GDAL
into reading arbitrary data sources.
Added gpkg_list_contents()
and
gpkg_ogr_contents()
; the former returns only table names
registered in gpkg_contents
table, which are optionally
intersected with tables defined in gpkg_ogr_contents
when
ogr=TRUE
.
Fixed bug in .gpkg_gdaloptions_add()
that could
cause addition of options with no value set
Added gpkg_vect()
: a
terra::vect()
-based analog of gpkg_table()
for
lazy manipulation of vector and attribute data in a GeoPackage
gpkg_update_table()
defaults to
wherecol=NULL
which allows updating rows with no SQL
WHERE
clause specified
Refactoring table accessor methods (https://github.com/brownag/gpkg/issues/2)
Renamed lazy.frame()
->
gpkg_table_pragma()
Renamed dplyr.frame()
->
gpkg_table()
gpkg_table()
gains collect
argument
(toggles materializing data.frame v.s. ‘dbplyr’ approach).
collect
requires only ‘RSQLite’ not ‘dbplyr’.
gpkg_tables()
gains pragma
argument to
toggle use of gpkg_table_pragma()
over
gpkg_table()
. It also supports collect
argument.
gpkg_update_table()
is now exported; this method
is/was used internally for updating the NoData entry for existing layers
via gpkg_tile_set_data_null()
Updated definitions of lazy.frame()
and
dplyr.frame()
and related docs
Updated gpkg_write()
for raster, vector, and
attribute data
General cleanup and refactored approach for splitting input data sources between attributes, vector, and tiled grid coverage.
New approach still contains hard-coded logic related to the allowed object types and file data sources (that will be generalized in the future)
RASTER_TABLE
name is now properly injected into GDAL
options from named list input (when not otherwise specified)
Bug fix in geopackage(<list>)
related to
appending v.s. overwriting raster data
gpkg_update_contents()
: Handle gpkgext_
and sqlite_sequence
as standard GPKG table prefixes
Added {dbplyr} backend option to return tibble
object via geopackage
object internal
SQLiteConnection
Changed formatting of PRAGMA table_info
child
data.frame in lazy.frame()
result