Czytasz klasę obiektów w geobazie pliku za pomocą R?

27

Mam funkcję zawartą w geobazie, która jest większa niż 2 GB jako eksportowany plik kształtu. Muszę uruchomić funkcję wyodrębniania w R, aby przypisać wielokątom dane z pliku rastrowego. Eksportowanie funkcji jako tabeli nie jest rozwiązaniem. Jak odczytać klasy elementów zawarte w geobazie pliku Esri?

Jodi Whittier
źródło

Odpowiedzi:

38

Możesz użyć rgdal, aby uzyskać dostęp do klas obiektów w geobazach plików 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
źródło
2
Wcześniej można było to zrobić tylko wtedy, gdy pobrano interfejs API filegeodatabase API ESRI i skompilowano na nim GDAL. Jeśli używasz OSGeo4W do zainstalowania GDAL, możesz to zrobić automatycznie. Jednak mogło to ulec zmianie w późniejszych wersjach GDAL i może być teraz natywne, więc jeśli się mylę, przepraszam.
Jeffrey Evans,
3
@JeffreyEvans To jest teraz natywny.
Aaron
4
Chociaż jest natywny dla systemu Windows, wydaje się, że nie jest obecnie dołączany do innych platform (przynajmniej Debian Jessie).
Cotton.Rockwood 04.04.16
1
+1 działa ładnie. Pomaga wiedzieć, że layerargument można pominąć, gdy w GDB jest tylko jedna klasa elementów.
whuber
2
Dla tych, którzy nie wiedzą nic o gdbplikach, fgdbw tej odpowiedzi tutaj jest katalog i ogrListLayers()działa na tym katalogu ...
MichaelChirico
2

Jak już napisano w tej odpowiedzi , teraz działa również bardzo ładnie z sf:

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

Ale pisząc do fgdb jeszcze nie zaimplementowano ( jeszcze? ), Musisz mieć licencję ArcGIS / ArcMap, a także bibliotekę R arcgisbinding(patrz https://github.com/R-ArcGIS/r-bridge )

st_drivers()$write[st_drivers()$long_name == "ESRI FileGDB"]
#> [1] FALSE
Ratnanil
źródło