Membaca kelas fitur dalam file geodatabase menggunakan R?

27

Saya memiliki fitur yang terkandung dalam geodatabase yang lebih besar dari 2GB sebagai shapefile yang diekspor. Saya perlu menjalankan fungsi ekstrak dalam R untuk atribut poligon dengan data dari file raster. Mengekspor fitur sebagai tabel bukanlah solusi. Bagaimana saya bisa membaca kelas fitur yang terkandung dalam geodatabase file Esri?

Jodi Whittier
sumber

Jawaban:

38

Anda dapat menggunakan rgdal untuk mengakses kelas fitur di geodatabases file 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)
Harun
sumber
2
Sebelumnya, Anda hanya bisa melakukan ini jika Anda mengunduh ESRI filegeodatabase API dan mengkompilasi GDAL. Jika Anda menggunakan OSGeo4W untuk menginstal GDAL, ada opsi untuk melakukan ini secara otomatis. Namun, ini mungkin telah berubah di rilis GDAL kemudian dan sekarang bisa jadi asli, jika saya salah saya minta maaf.
Jeffrey Evans
3
@ JeffreyEvans Ini asli sekarang.
Aaron
4
Meskipun ini asli untuk windows, sepertinya tidak termasuk saat ini untuk platform lain (setidaknya Debian Jessie).
Cotton.Rockwood
1
+1 Bekerja dengan baik. Ini membantu untuk mengetahui bahwa layerargumen dapat dihilangkan ketika hanya ada satu kelas fitur di GDB.
whuber
2
Bagi mereka yang tidak tahu apa-apa tentang gdbfile, fgdbdalam jawaban ini di sini adalah direktori dan ogrListLayers()bekerja pada direktori ini ...
MichaelChirico
2

Seperti yang sudah diposting dalam jawaban ini, ini sekarang juga bekerja dengan sangat baik dengan sf:

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

Tetapi menulis ke fgdb ist belum diimplementasikan ( belum? ), Anda harus memiliki Lisensi ArcGIS / ArcMap serta perpustakaan R arcgisbinding(lihat https://github.com/R-ArcGIS/r-bridge )

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