在R中使用readOGR读取包含多个要素数据集的.gdb文件

6
我正在尝试将包含在geodatabase文件(.gdb)中的shapefile读入R中。.gdb包含两个Feature Datasets,每个数据集中都有多个Feature Classes。 问题在于只有其中一个Feature Dataset被读取。 具体来说,我正在使用NHD数据集来读取所有州的数据ftp://nhdftp.usgs.gov/DataSets/Staged/States/FileGDB/HighResolution/。在每个州的.gdb中,有两个Feature Datasets,“WBD”和“Hydrography”。仅“WBD”被读取,使用ogrListLayers仅返回“WBD”的图层。如何指定“Hydrography”数据集并访问其中的Feature Classes? 非常感谢任何建议。 R版本3.2.0.OSX v.10.10.3
编辑06/16/15: 当我运行orgListLayers时,它返回:
ogrListLayers('NHDH_VI.gdb')
[1] "ExternalCrosswalk"       "NHDFCode"                "NHDFeatureToMetadata"   
[4] "NHDFlow"                 "NHDFlowlineVAA"          "NHDMetadata"            
[7] "NHDProcessingParameters" "NHDReachCodeMaintenance" "NHDReachCrossReference" 
[10] "NHDSourceCitation"       "NHDStatus"               "NHDVerticalRelationship"
[13] "WBDHU14"                 "WBDHU8"                  "WBDHU2"                 
[16] "WBDHU4"                  "WBDHU6"                  "WBDHU10"                
[19] "WBDHU12"                 "WBDHU16"                 "HYDRO_NET_Junctions" 

21层与Mike T和hrbrmstr所述的不同。具体而言,我正在寻找:图层名称:NHDWaterbody。 当我从终端运行ogrinfo -ro NHDH_VI.gdb时。
ERROR 1: Error: Failed to open Geodatabase (This release of the GeoDatabase is either invalid or out of date.)
FAILURE: Unable to open datasource `NHDH_VI.gdb' with the following drivers.
      -> FileGDB
      -> OpenFileGDB
      ...

你应该在这里或者GIS SO上发布更多的细节。请查看我的非答案回复以获取更多问题。 - hrbrmstr
2个回答

6

您可能正在使用ESRI文件地理数据库(OpenFileGDB)驱动程序阅读该文件。OGR不保留或使用要素数据集,因此所有要素类都混合在同一个平面命名空间中。例如,在ArcCatalog中查看(例如)NHDH_VI.gdb:

ArcCatalog

然后使用命令行提示符通过 ogrinfo -ro NHDH_VI.gdb 读取同一文件。

INFO: Open of `NHDH_VI.gdb'
      using driver `OpenFileGDB' successful.
1: NHDPoint (Point)
2: NHDFlowline (Multi Line String)
3: NHDLine (Multi Line String)
4: NHDArea (Multi Polygon)
5: NHDWaterbody (Multi Polygon)
6: NHDAreaEventFC (Multi Polygon)
7: NHDLineEventFC (Multi Line String)
8: NHDPointEventFC (Point)
9: WBDLine (Multi Line String)
10: NonContributingDrainageArea (Multi Polygon)
11: NWISBoundary (Multi Line String)
12: NWISDrainageArea (Multi Polygon)
13: WBDHU14 (Multi Polygon)
14: WBDHU8 (Multi Polygon)
15: WBDHU2 (Multi Polygon)
16: WBDHU4 (Multi Polygon)
17: WBDHU6 (Multi Polygon)
18: WBDHU10 (Multi Polygon)
19: WBDHU12 (Multi Polygon)
20: WBDHU16 (Multi Polygon)
21: HYDRO_NET_Junctions (Point)

同样可以在 R 中使用:

> library(rgdal)
> ogrListLayers("NHDH_VI.gdb")
 [1] "NHDPoint"                    "NHDFlowline"                
 [3] "NHDLine"                     "NHDArea"                    
 [5] "NHDWaterbody"                "NHDAreaEventFC"             
 [7] "NHDLineEventFC"              "NHDPointEventFC"            
 [9] "WBDLine"                     "NonContributingDrainageArea"
[11] "NWISBoundary"                "NWISDrainageArea"           
[13] "WBDHU14"                     "WBDHU8"                     
[15] "WBDHU2"                      "WBDHU4"                     
[17] "WBDHU6"                      "WBDHU10"                    
[19] "WBDHU12"                     "WBDHU16"                    
[21] "HYDRO_NET_Junctions"        
attr(,"driver")
[1] "OpenFileGDB"
attr(,"nlayers")
[1] 21

所以你需要手动从ArcCatalog层次结构中过滤数据集,以找到OGR可以找到的内容。并非所有类都可用于OGR(例如非空间表,关系类)。


0

这不是一个回答,但需要更多的空间来澄清,因为问题提问者没有提供可重现的示例。一旦问题提问者提供了更完整的问题,我将删除此内容。

当我在NHDH_CT.gdb(其中之一较小的存档)上运行ogrinfo时,我得到以下结果:

Layer name: NHDPoint
Layer name: NHDFlowline
Layer name: NHDLine
Layer name: NHDArea
Layer name: NHDWaterbody
Layer name: NHDAreaEventFC
Layer name: NHDLineEventFC
Layer name: NHDPointEventFC
Layer name: WBDLine
Layer name: NonContributingDrainageArea
Layer name: NWISBoundary
Layer name: NWISDrainageArea
Layer name: WBDHU14
Layer name: WBDHU8
Layer name: WBDHU2
Layer name: WBDHU4
Layer name: WBDHU6
Layer name: WBDHU10
Layer name: WBDHU12
Layer name: WBDHU16
Layer name: HYDRO_NET_Junctions

那匹配:

> ogrListLayers("NHDH_CT.gdb")
 [1] "NHDPoint"                    "NHDFlowline"                 "NHDLine"                    
 [4] "NHDArea"                     "NHDWaterbody"                "NHDAreaEventFC"             
 [7] "NHDLineEventFC"              "NHDPointEventFC"             "WBDLine"                    
[10] "NonContributingDrainageArea" "NWISBoundary"                "NWISDrainageArea"           
[13] "WBDHU14"                     "WBDHU8"                      "WBDHU2"                     
[16] "WBDHU4"                      "WBDHU6"                      "WBDHU10"                    
[19] "WBDHU12"                     "WBDHU16"                     "HYDRO_NET_Junctions"        

你期望看到什么?你的ogrinfo显示了什么?(注意:夏威夷的输出类似)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接