Lecture de la classe d'entités dans la géodatabase fichier à l'aide de R?

27

J'ai une fonctionnalité contenue dans une géodatabase qui est supérieure à 2 Go en tant que fichier de formes exporté. J'ai besoin d'exécuter une fonction d'extraction dans R pour attribuer les polygones aux données d'un fichier raster. L'exportation de la fonction sous forme de tableau n'est pas une solution. Comment lire les classes d'entités contenues dans une géodatabase fichier Esri?

Jodi Whittier
la source

Réponses:

38

Vous pouvez utiliser rgdal pour accéder aux classes d'entités dans les géodatabases fichier 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
la source
2
Auparavant, vous ne pouviez le faire que si vous aviez téléchargé l'API ESGE filegeodatabase et compilé GDAL avec. Si vous utilisez OSGeo4W pour installer GDAL, il existe une option pour le faire automatiquement. Cependant, cela peut avoir changé dans les versions ultérieures de GDAL et il pourrait maintenant être natif donc, si je me trompe, je m'excuse.
Jeffrey Evans
3
@JeffreyEvans C'est natif maintenant.
Aaron
4
Bien qu'il soit natif pour Windows, il ne semble pas être actuellement inclus pour d'autres plates-formes (au moins Debian Jessie).
Cotton.Rockwood
1
+1 Fonctionne bien. Il est utile de savoir que l' layerargument peut être omis lorsqu'il n'y a qu'une seule classe d'entités dans la GDB.
whuber
2
Pour ceux qui ne connaissent rien aux gdbfichiers, fgdbdans cette réponse voici un répertoire et ogrListLayers()travaille sur ce répertoire ...
MichaelChirico
2

Comme déjà indiqué dans cette réponse , cela fonctionne désormais très bien avec sf:

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

Mais l'écriture dans un fgdb n'est pas encore implémentée ? Vous devez avoir une licence ArcGIS / ArcMap ainsi que la bibliothèque R arcgisbinding(voir https://github.com/R-ArcGIS/r-bridge )

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