vapour icon indicating copy to clipboard operation
vapour copied to clipboard

api functions

Open mdsumner opened this issue 4 years ago • 4 comments


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)})

mdsumner avatar Sep 01 '21 02:09 mdsumner

see branch https://github.com/hypertidy/vapour/tree/api-stuff

mdsumner avatar Sep 04 '21 02:09 mdsumner

consider #91

mdsumner avatar Sep 09 '21 01:09 mdsumner

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

mdsumner avatar Oct 15 '22 05:10 mdsumner

also see approach with R6 in inst/R6-api/

mdsumner avatar Oct 15 '22 06:10 mdsumner

this is all in diminutive/gdalptr but also see gdalraster

mdsumner avatar May 27 '23 11:05 mdsumner