Lendo a classe de recurso no geodatabase de arquivo usando R?

27

Eu tenho um recurso contido em um geodatabase maior que 2 GB como um shapefile exportado. Eu preciso executar uma função de extração em R para atribuir os polígonos com dados de um arquivo raster. Exportar o recurso como uma tabela não é uma solução. Como posso ler as classes de recursos contidas em um geodatabase do arquivo Esri?

Jodi Whittier
fonte

Respostas:

38

Você pode usar o rgdal para acessar as classes de recursos nos geodatabases do arquivo Esri.

require(rgdal)

# The input file geodatabase
fgdb <- "C:/path/to/your/filegeodatabase.gdb"

# List all feature classes in a file geodatabase
subset(ogrDrivers(), grepl("GDB", name))
fc_list <- ogrListLayers(fgdb)
print(fc_list)

# Read the feature class
fc <- readOGR(dsn=fgdb,layer="some_featureclass")

# Determine the FC extent, projection, and attribute information
summary(fc)

# View the feature class
plot(fc)
Aaron
fonte
2
Anteriormente, você só poderia fazer isso se baixasse a API de banco de dados de arquivos ESRI e compilasse o GDAL. Se você usar o OSGeo4W para instalar o GDAL, há uma opção para fazer isso automaticamente. No entanto, isso pode ter sido alterado em versões posteriores do GDAL e agora pode ser nativo, portanto, se estiver incorreto, peço desculpas.
Jeffrey Evans
3
@JeffreyEvans Agora é nativo.
Aaron
4
Embora seja nativo para Windows, parece não estar incluído atualmente para outras plataformas (pelo menos Debian Jessie).
amigos estão dizendo sobre escola de samba
1
+1 funciona bem. Ajuda saber que o layerargumento pode ser omitido quando há apenas uma classe de recurso no GDB.
whuber
2
Para aqueles que não sabem nada sobre gdbos arquivos, fgdbnesta resposta aqui é um diretório e ogrListLayers()trabalha neste diretório ...
MichaelChirico
2

Como já postado nesta resposta , isso agora também funciona muito bem com sf:

require(sf)
fc <- sf::st_read("C:/path/to/your/filegeodatabase.gdb", layer = "some_featureclass")

Mas a gravação em um fgdb não está implementada ( ainda? ), Você precisaria ter uma licença ArcGIS / ArcMap e a biblioteca R arcgisbinding(consulte https://github.com/R-ArcGIS/r-bridge )

st_drivers()$write[st_drivers()$long_name == "ESRI FileGDB"]
#> [1] FALSE
Ratnanil
fonte