Nothing
test_that("OGR management utilities work", {
# these tests assume GDAL was built with libsqlite3 which is optional
# this should be a safe assumption since PROJ requires libsqlite3
# GPKG
dsn <- tempfile(fileext = ".gpkg")
expect_false(ogr_ds_exists(dsn))
expect_true(ogr_ds_create("GPKG", dsn, "test_layer", geom_type = "POLYGON"))
expect_true(ogr_ds_exists(dsn, with_update=TRUE))
expect_true(ogr_layer_exists(dsn, "test_layer"))
# overwrite defaults to FALSE
expect_error(ogr_ds_create("GPKG", dsn, "test_layer",
geom_type = "POLYGON"))
expect_true(ogr_ds_create("GPKG", dsn, "test_layer", geom_type = "POLYGON",
overwrite = TRUE))
expect_true(ogr_ds_exists(dsn, with_update=TRUE))
expect_true(ogr_layer_exists(dsn, "test_layer"))
expect_false(ogr_layer_exists(dsn, "test_layer_2"))
expect_true(ogr_ds_test_cap(dsn)$CreateLayer)
lco <- "DESCRIPTION=test layer2"
expect_true(ogr_layer_create(dsn, "test_layer_2", NULL, "POLYGON",
"EPSG:5070", lco))
expect_true(ogr_layer_exists(dsn, "test_layer_2"))
expect_equal(ogr_ds_layer_count(dsn), 2)
expect_equal(ogr_ds_layer_names(dsn), c("test_layer", "test_layer_2"))
expect_equal(ogr_field_index(dsn, "test_layer_2", "DN"), -1)
expect_true(ogr_layer_test_cap(dsn, "test_layer_2")$CreateField)
expect_true(ogr_field_create(dsn, "test_layer_2", "DN",
fld_type = "OFTInteger"))
expect_equal(ogr_field_index(dsn, "test_layer_2", "DN"), 0)
expect_equal(ogr_layer_field_names(dsn, "test_layer_2"), c("DN", "geom"))
expect_true(ogr_ds_test_cap(dsn)$DeleteLayer)
expect_true(ogr_layer_delete(dsn, "test_layer"))
expect_equal(ogr_ds_layer_count(dsn), 1)
expect_false(ogr_layer_delete(dsn, "test_layer_nonexist"))
expect_true(ogr_layer_test_cap(dsn, "test_layer_2")$AlterFieldDefn)
expect_true(ogr_field_rename(dsn, "test_layer_2", "DN", "renamed"))
expect_equal(ogr_layer_field_names(dsn, "test_layer_2"),
c("renamed", "geom"))
expect_true(ogr_layer_test_cap(dsn, "test_layer_2")$DeleteField)
expect_true(ogr_field_delete(dsn, "test_layer_2", "renamed"))
expect_equal(ogr_layer_field_names(dsn, "test_layer_2"), "geom")
expect_true(ogr_layer_delete(dsn, "test_layer_2"))
expect_equal(ogr_ds_layer_count(dsn), 0)
defn <- ogr_def_layer("Point", srs = epsg_to_wkt(4326))
defn$field1 <- ogr_def_field("OFTInteger64",
is_nullable = FALSE,
is_unique = TRUE)
defn$field2 <- ogr_def_field("OFTString",
fld_width = 25,
is_nullable = FALSE,
default_value = "'a default string'")
defn$field3 <- ogr_def_field("OFTReal")
expect_true(ogr_layer_create(dsn, "test_layer3", layer_defn = defn))
expect_equal(ogr_ds_layer_names(dsn), "test_layer3")
expect_equal(ogr_layer_field_names(dsn, "test_layer3"),
c("field1", "field2", "field3", "geom"))
fld4_defn <- ogr_def_field("OFTReal",
default_value = "0.0")
expect_true(ogr_field_create(dsn, "test_layer3", "field4",
fld_defn = fld4_defn))
fld5_defn <- ogr_def_field("OFTString",
fld_width = 25,
is_nullable = FALSE,
default_value = "'a default string'")
expect_true(ogr_field_create(dsn, "test_layer3", "field5",
fld_defn = fld5_defn))
fld6_defn <- ogr_def_field("OFTInteger", fld_subtype = "OFSTBoolean")
expect_true(ogr_field_create(dsn, "test_layer3", "field6",
fld_defn = fld6_defn))
expect_equal(ogr_layer_field_names(dsn, "test_layer3"),
c("field1", "field2", "field3", "field4", "field5", "field6",
"geom"))
# only one geom field supported by GPKG
geomfld2_defn <- ogr_def_geom_field("Polygon", srs = epsg_to_wkt(4326))
expect_false(ogr_geom_field_create(dsn, "test_layer3", "geom2",
geom_fld_defn = geomfld2_defn))
expect_equal(ogr_layer_field_names(dsn, "test_layer3"),
c("field1", "field2", "field3", "field4", "field5", "field6",
"geom"))
deleteDataset(dsn)
# SQLite
dsn <- tempfile(fileext = "sqlite")
defn <- ogr_def_layer("Point", srs = epsg_to_wkt(4326))
defn$field1 <- ogr_def_field("OFTInteger64",
is_nullable = FALSE,
is_unique = TRUE)
defn$field2 <- ogr_def_field("OFTString",
fld_width = 25,
default_value = "'a default string'")
defn$field3 <- ogr_def_field("OFTReal")
ds_opt <- NULL
if (has_spatialite())
ds_opt <- "SPATIALITE=YES"
expect_true(ogr_ds_create("SQLite", dsn, "layer1",
layer_defn = defn,
dsco = ds_opt,
lco = "GEOMETRY_NAME=geom1"))
expect_equal(ogr_layer_field_names(dsn, "layer1"),
c("field1", "field2", "field3", "geom1"))
# multiple geom fields supported by SQLite
geomfld2_defn <- ogr_def_geom_field("Polygon", srs = epsg_to_wkt(4326))
expect_true(ogr_geom_field_create(dsn, "layer1", "geom2",
geom_fld_defn = geomfld2_defn))
expect_equal(ogr_layer_field_names(dsn, "layer1"),
c("field1", "field2", "field3", "geom1", "geom2"))
deleteDataset(dsn)
# create with two geom fields initially
# with geom2 nullable and ignored
dsn <- tempfile(fileext = "sqlite")
defn$geom2 <- ogr_def_geom_field("Polygon", srs = epsg_to_wkt(4326),
is_nullable = TRUE, is_ignored = TRUE)
expect_true(ogr_ds_create("SQLite", dsn, "layer1",
layer_defn = defn))
expect_equal(ogr_layer_field_names(dsn, "layer1"),
c("field1", "field2", "field3", "GEOMETRY", "geom2"))
deleteDataset(dsn)
})
test_that("edit data using SQL works on shapefile", {
# TODO(ctoney): add tests to confirm data once vector I/O is implemented
src <- system.file("extdata/ynp_fires_1984_2022.gpkg", package="gdalraster")
perims_shp <- paste0(tempdir(), "/", "mtbs_perims.shp")
ogr2ogr(src, perims_shp, src_layers = "mtbs_perims")
expect_equal(ogr_ds_layer_names(perims_shp), "mtbs_perims")
num_fields <- length(ogr_layer_field_names(perims_shp, "mtbs_perims"))
expect_true(num_fields > 2)
expect_true(ogr_layer_test_cap(perims_shp, "mtbs_perims")$CreateField)
sql <- "ALTER TABLE mtbs_perims ADD burn_bnd_ha float"
expect_true(is.null(ogr_execute_sql(perims_shp, sql)))
sql <- "UPDATE mtbs_perims SET burn_bnd_ha = (burn_bnd_ac / 2.471)"
ogr_execute_sql(perims_shp, sql, dialect = "SQLite")
expect_length(ogr_layer_field_names(perims_shp, "mtbs_perims"),
num_fields + 1)
# spatial filter
# this should filter to 40 features from 61
bb <- c(469685.97, 11442.45, 544069.63, 85508.15)
expect_true(is.null(ogr_execute_sql(perims_shp, sql,
spatial_filter = bb)))
bb_wkt <- bbox_to_wkt(bb)
expect_true(is.null(ogr_execute_sql(perims_shp, sql,
spatial_filter = bb_wkt)))
# error for invalid bb
bb_invalid <- c(469685.97, 11442.45)
expect_error(is.null(ogr_execute_sql(perims_shp, sql,
spatial_filter = bb_invalid)))
deleteDataset(perims_shp)
})
test_that("GeoJSON layer and field names are correct", {
dsn <- system.file("extdata/test.geojson", package="gdalraster")
expect_true(ogr_ds_exists(dsn))
dsn2 <- file.path(tempdir(TRUE), "test.geojson")
file.copy(dsn, dsn2)
expect_true(ogr_ds_exists(dsn2, with_update = TRUE))
expect_equal(ogr_ds_format(dsn2), "GeoJSON")
expect_equal(ogr_ds_layer_count(dsn2), 1)
expect_equal(ogr_ds_layer_names(dsn2), "test")
expect_equal(ogr_layer_field_names(dsn2, "test"),
c("int", "string", "double", "int2", ""))
deleteDataset(dsn2)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.