使用R在文件地理数据库中读取要素类?


27

我有一个大于2GB的地理数据库中包含的功能作为导出的shapefile。我需要在R中运行提取函数,以将多边形与来自栅格文件的数据一起赋予属性。将功能导出为表格不是解决方案。如何读取Esri文件地理数据库中包含的要素类?

Answers:


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
以前,只有下载了ESRI filegeodatabase API并针对该API编译了GDAL,您才能执行此操作。如果使用OSGeo4W安装GDAL,则可以选择自动执行此操作。但是,这可能在GDAL的更高版本中已更改,并且现在可以是本机的,因此,如果我输入错误,我表示歉意。
Jeffrey Evans 2015年

3
@JeffreyEvans这是本地人。
亚伦

4
尽管它是Windows的本机,但其他平台(至少Debian Jessie)目前似乎未包含它。
Cotton.Rockwood '16

1
+1效果很好。知道layer在GDB中只有一个要素类时,可以省略该参数,这将很有帮助。
ub

2
对于那些对gdb文件一窍不通的人,fgdb在此答案中是一个目录,并且ogrListLayers()可以在此目录上工作...
MichaelChirico

2

正如已经在此答案中发布的那样,现在也可以很好地与sf以下命令配合使用:

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

但是要写入尚未实现的fgdb ist(尚未完成?),您必须拥有ArcGIS / ArcMap许可证以及R库arcgisbinding(请参阅https://github.com/R-ArcGIS/r-bridge

st_drivers()$write[st_drivers()$long_name == "ESRI FileGDB"]
#> [1] FALSE
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.