Чтение класса объектов в файловой базе геоданных с использованием R?

27

У меня есть функция, содержащаяся в базе геоданных размером более 2 ГБ в качестве экспортируемого шейп-файла. Мне нужно запустить функцию извлечения в R, чтобы приписать полигоны с данными из растрового файла. Экспорт функции в виде таблицы не является решением. Как я могу прочитать классы объектов, содержащиеся в файловой базе геоданных Esri?

Джоди Уиттиер
источник

Ответы:

38

Вы можете использовать rgdal для доступа к классам пространственных объектов в файловых базах геоданных 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)
Аарон
источник
2
Ранее это можно было сделать только в том случае, если вы загрузили API-интерфейс файловой базы данных ESRI и скомпилировали GDAL. Если вы используете OSGeo4W для установки GDAL, есть возможность сделать это автоматически. Однако, это могло измениться в более поздних выпусках GDAL, и теперь оно может быть встроенным, поэтому, если я ошибаюсь, я прошу прощения.
Джеффри Эванс
3
@JeffreyEvans Теперь это родной.
Аарон
4
Хотя он является родным для Windows, в настоящее время он не включен для других платформ (по крайней мере, для Debian Jessie).
Коттон. Роквуд
1
+1 Работает красиво. Полезно знать, что layerаргумент может быть опущен, когда в GDB есть только один класс пространственных объектов.
whuber
2
Для тех , кто ничего не знает о gdbфайлах, fgdbв этом ответе здесь есть каталог и ogrListLayers()работает на этой директории ...
MichaelChirico
2

Как уже сообщалось в этом ответе , теперь это также очень хорошо работает с sf:

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

Но запись в fgdb не реализована ( пока? ), Вам потребуется лицензия ArcGIS / ArcMap, а также библиотека R arcgisbinding(см. Https://github.com/R-ArcGIS/r-bridge ).

st_drivers()$write[st_drivers()$long_name == "ESRI FileGDB"]
#> [1] FALSE
Ratnanil
источник