vapour
vapour copied to clipboard
api functions
file <- "list_locality_postcode_meander_valley.tab"
## A MapInfo TAB file with polygons
f <- system.file(file.path("extdata/tab", file), package="vapour", mustWork = TRUE)
f1 <- system.file(file.path("extdata/point.shp"), package="vapour", mustWork = TRUE)
library(vapour)
ds <- vapour:::gh_GDALOpenEx(f)
layer <- vapour:::gh_GetLayer(ds, 0)
feature <- vapour:::gh_GetNextFeature(layer)
geomref <- vapour:::gh_getGeometryRef(feature)
vapour:::gh_getPoints_preview(geomref)
#system.time({
ds <- vapour:::gh_GDALOpenEx(f)
layer <- vapour:::gh_GetLayer(ds, 0)
l <- vector("list", 58)
for (i in seq_along(l)) {
feature <- vapour:::gh_GetNextFeature(layer)
geomref <- gh_getGeometryRef(feature)
l[[i]] <- vapour:::gh_exportToWkb(geomref)
vapour:::gh_DestroyFeature(feature)
}
vapour:::gh_GDALClose(ds)
#rm(ds, feature, layer)
system.time({vapour_read_geometry(f1)})
see branch https://github.com/hypertidy/vapour/tree/api-stuff
consider #91
Ok bit better now
f <- system.file("extdata/sst_c.gpkg", package = "vapour", mustWork = TRUE)
ds <- gh_GDALOpenEx(f)
ly <- gh_GetLayer(ds, 0)
i <- 0
isnull <- function(pointer){
a <- attributes(pointer)
attributes(pointer) <- NULL
out <- identical(pointer, new("externalptr"))
attributes(pointer) <- a
return(out)
}
while(!isnull(f0 <- gh_GetNextFeature(ly))) {
i <- i + 1
if (i == 1) {
## XYZ of first ring
p <- gh_getPoints_preview(gh_getGeometryRef(f0))
}
print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
ds <- gh_GDALOpenEx(sds)
gh_GDALGetGeoTransform(ds)
[1] 0.00 0.25 0.00 90.00 0.00 -0.25
gh_GDALGetRasterSize(ds)
#[1] 1440 720
gh_GDALRasterio(ds, c(0, 0, 200, 200, 10, 15))
# [1] -102 -100 -102 -105 -106 -109 -111 -109 -111 -113 -38 -14 -29 -67 -73 -104
# [17] -121 -107 -123 -146 1 7 -11 -25 -41 -73 -81 -103 -130 -130 201 580
#...
prod(gh_GDALGetRasterSize(ds))
#[1] 1036800
str(gh_GDALRasterio(ds, -1))
# num [1:1036800] -110 -110 -110 -110 -110 -110 -110 -110 -110 -110 ...
## it faster
system.time(gh_GDALRasterio(ds, -1))
# user system elapsed
# 0.034 0.000 0.034
system.time(vapour_read_raster(sds, native = TRUE))
# user system elapsed
# 0.146 0.012 0.211
also see approach with R6 in inst/R6-api/
this is all in diminutive/gdalptr but also see gdalraster