sf icon indicating copy to clipboard operation
sf copied to clipboard

st_read() cannot find raster layer in geodatabase

Open yjpenny opened this issue 3 years ago • 6 comments

Hi,

I have tried to read a .gdb folder using st_read(), and got the following error:

ras <- read_sf(dsn = "DC_slr_final_dist_rasters.gdb") Error in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : No layers in datasource.

I got a consistent error from using st_layers() as well:

st_layers(dsn = "DC_slr_final_dist_rasters.gdb") Error in max(sapply(x$geomtype, length)) : invalid 'type' (list) of argument

I opened the data in ArcMap and can confirm that it contains layers. The data can be downloaded from: https://coast.noaa.gov/htdata/Inundation/SLR/SLRdata/DC/DC_slr_raster_data_dist.zip

Could you help me with this issue? Thank you very much.

Best, Penny

yjpenny avatar Apr 15 '22 18:04 yjpenny

For me both commands don't result in error messages. I also see

> st_drivers()["OpenFileGDB",]
                   name    long_name write  copy is_raster is_vector  vsi
OpenFileGDB OpenFileGDB ESRI FileGDB FALSE FALSE     FALSE      TRUE TRUE

what does this command give for you?

edzer avatar Apr 15 '22 21:04 edzer

I see:

> library(sf)
Linking to GEOS 3.10.2, GDAL 3.5.0dev-33f49c1ed0, PROJ 9.0.0; sf_use_s2() is TRUE
> st_layers("DC_slr_final_dist_rasters.gdb")
Driver: OpenFileGDB 
Available layers:
                   layer_name geometry_type features fields
1            DC_slr_depth_0ft Multi Polygon        1      3
2           DC_slr_depth_10ft Multi Polygon        1      3
3            DC_slr_depth_1ft Multi Polygon        1      3
4            DC_slr_depth_2ft Multi Polygon        1      3
5            DC_slr_depth_3ft Multi Polygon        1      3
6            DC_slr_depth_4ft Multi Polygon        1      3
7            DC_slr_depth_5ft Multi Polygon        1      3
8            DC_slr_depth_6ft Multi Polygon        1      3
9            DC_slr_depth_7ft Multi Polygon        1      3
10           DC_slr_depth_8ft Multi Polygon        1      3
11           DC_slr_depth_9ft Multi Polygon        1      3
12  fras_aux_DC_slr_depth_0ft            NA        1      3
13 fras_aux_DC_slr_depth_10ft            NA        1      3
14  fras_aux_DC_slr_depth_1ft            NA        1      3
15  fras_aux_DC_slr_depth_2ft            NA        1      3
16  fras_aux_DC_slr_depth_3ft            NA        1      3
17  fras_aux_DC_slr_depth_4ft            NA        1      3
18  fras_aux_DC_slr_depth_5ft            NA        1      3
19  fras_aux_DC_slr_depth_6ft            NA        1      3
20  fras_aux_DC_slr_depth_7ft            NA        1      3
21  fras_aux_DC_slr_depth_8ft            NA        1      3
22  fras_aux_DC_slr_depth_9ft            NA        1      3
23  fras_blk_DC_slr_depth_0ft            NA      292      6
24 fras_blk_DC_slr_depth_10ft            NA      343      6
25  fras_blk_DC_slr_depth_1ft            NA      295      6
26  fras_blk_DC_slr_depth_2ft            NA      296      6
27  fras_blk_DC_slr_depth_3ft            NA      300      6
28  fras_blk_DC_slr_depth_4ft            NA      306      6
29  fras_blk_DC_slr_depth_5ft            NA      309      6
30  fras_blk_DC_slr_depth_6ft            NA      315      6
31  fras_blk_DC_slr_depth_7ft            NA      321      6
32  fras_blk_DC_slr_depth_8ft            NA      328      6
33  fras_blk_DC_slr_depth_9ft            NA      337      6
34  fras_bnd_DC_slr_depth_0ft            NA        1     18
35 fras_bnd_DC_slr_depth_10ft            NA        1     18
36  fras_bnd_DC_slr_depth_1ft            NA        1     18
37  fras_bnd_DC_slr_depth_2ft            NA        1     18
38  fras_bnd_DC_slr_depth_3ft            NA        1     18
39  fras_bnd_DC_slr_depth_4ft            NA        1     18
40  fras_bnd_DC_slr_depth_5ft            NA        1     18
41  fras_bnd_DC_slr_depth_6ft            NA        1     18
42  fras_bnd_DC_slr_depth_7ft            NA        1     18
43  fras_bnd_DC_slr_depth_8ft            NA        1     18
44  fras_bnd_DC_slr_depth_9ft            NA        1     18
45  fras_ras_DC_slr_depth_0ft            NA        1      3
46 fras_ras_DC_slr_depth_10ft            NA        1      3
47  fras_ras_DC_slr_depth_1ft            NA        1      3
48  fras_ras_DC_slr_depth_2ft            NA        1      3
49  fras_ras_DC_slr_depth_3ft            NA        1      3
50  fras_ras_DC_slr_depth_4ft            NA        1      3
51  fras_ras_DC_slr_depth_5ft            NA        1      3
52  fras_ras_DC_slr_depth_6ft            NA        1      3
53  fras_ras_DC_slr_depth_7ft            NA        1      3
54  fras_ras_DC_slr_depth_8ft            NA        1      3
55  fras_ras_DC_slr_depth_9ft            NA        1      3

but think that - from the file name - most of the data is raster not vector. It isn't obvious how to read such a FileGDB with GDAL drivers. Does the data provider offer GeoTiff or other alternatives? rgdal::readOGR() sees binary field type "Binary" when trying to read NULL geometry features.

rsbivand avatar Apr 16 '22 11:04 rsbivand

Fra: https://stackoverflow.com/questions/27821571/working-with-rasters-in-file-geodatabase-gdb-with-gdal and https://github.com/r-barnes/ArcRasterRescue:

 ./arc_raster_rescue.exe ~/tmp/bigshape/DC_slr_final_dist_rasters.gdb/
Arc Raster Rescue (url=github.com/r-barnes/ArcRasterRescue, hash=8e126e0ca17acc6f, compiled=2022-04-16 13:20:39)
Rasters found: 
 0 DC_slr_depth_0ft
 1 DC_slr_depth_1ft
 2 DC_slr_depth_2ft
 3 DC_slr_depth_3ft
 4 DC_slr_depth_4ft
 5 DC_slr_depth_5ft
 6 DC_slr_depth_6ft
 7 DC_slr_depth_10ft
 8 DC_slr_depth_7ft
 9 DC_slr_depth_8ft
10 DC_slr_depth_9ft

Output from conversion: DC_slr_final_dist_.zip Each band is almost 250MB, so no compression used in the geotiffs.

Unfortunately, all the raster values are missing. The data provider must make the data available to those without an Arc license in a different format.

rsbivand avatar Apr 16 '22 11:04 rsbivand

@edzer I got exactly the same output from this command:

st_drivers()["OpenFileGDB",] name long_name write copy is_raster is_vector vsi OpenFileGDB OpenFileGDB ESRI FileGDB FALSE FALSE FALSE TRUE TRUE

For me both commands don't result in error messages. I also see

> st_drivers()["OpenFileGDB",]
                   name    long_name write  copy is_raster is_vector  vsi
OpenFileGDB OpenFileGDB ESRI FileGDB FALSE FALSE     FALSE      TRUE TRUE

what does this command give for you?

yjpenny avatar Apr 16 '22 16:04 yjpenny

@rsbivand Thanks for looking into this. Yes, they are raster data and there are no geotiff alternatives by the data provider. Based on what you found with the conversion, is my understanding correct that I cannot read this data using sf unless I somehow save it in another format in ArcMap?

yjpenny avatar Apr 16 '22 16:04 yjpenny

You could read a GeoTiff or other GDAL-compatible format in stars, terra or similar packages handling raster data; sf is for vector data.

rsbivand avatar Apr 16 '22 21:04 rsbivand

See https://mastodon.social/@EvenRouault/109993230083314079 - GDAL 3.7.0 will have this.

edzer avatar Mar 27 '23 08:03 edzer