Lesen von Feature-Classes in File-Geodatabase mit R?

27

Ich habe eine Funktion in einer Geodatabase, die größer als 2 GB ist, als exportiertes Shapefile. Ich muss eine Extraktionsfunktion in R ausführen, um die Polygone mit Daten aus einer Rasterdatei zuzuordnen. Das Exportieren des Features als Tabelle ist keine Lösung. Wie kann ich Feature-Classes lesen, die in einer Esri File-Geodatabase enthalten sind?

Jodi Whittier
quelle

Antworten:

38

Mit rgdal können Sie auf Feature-Classes in Esri File- Geodatabases zugreifen.

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
quelle
2
Bisher war dies nur möglich, wenn Sie die ESRI-Dateidatenbank-API heruntergeladen und die GDAL damit kompiliert haben. Wenn Sie GDAL mit OSGeo4W installieren, können Sie dies automatisch tun. Dies hat sich jedoch möglicherweise in späteren Versionen von GDAL geändert und könnte nun systemeigen sein. Wenn ich falsch liege, entschuldige ich mich.
Jeffrey Evans
3
@ JeffreyEvans Dies ist jetzt native.
Aaron
4
Während es für Windows nativ ist, scheint es derzeit nicht für andere Plattformen (zumindest Debian Jessie) enthalten zu sein.
Cotton.Rockwood
1
+1 Funktioniert gut. Es ist hilfreich zu wissen, dass das layerArgument weggelassen werden kann, wenn nur eine Feature-Class in der GDB vorhanden ist.
whuber
2
Für diejenigen, die nichts über gdbDateien wissen , fgdbin dieser Antwort ist hier ein Verzeichnis und ogrListLayers()arbeitet an diesem Verzeichnis ...
MichaelChirico
2

Wie bereits in dieser Antwort geschrieben , funktioniert dies nun auch sehr gut mit sf:

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

Das Schreiben in eine fgdb ist ( noch? ) Nicht implementiert , Sie benötigen jedoch eine ArcGIS / ArcMap-Lizenz sowie die R-Bibliothek arcgisbinding(siehe https://github.com/R-ArcGIS/r-bridge ).

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