列出可用的 WFS 图层并使用 rgdal 读入数据帧

List aviable WFS layers and read into data frame with rgdal

根据不同的来源,我有以下问题它应该能够使用 rgdal 在 R 中读取 WFS 层。

dsn<-"WFS:http://geomap.reteunitaria.piemonte.it/ws/gsareprot/rp-01/areeprotwfs/wfs_gsareprot_1?service=WFS&request=getCapabilities"

ogrListLayers(dsn)
readOGR(dsn,"SIC")

该代码的结果应该是 1) 列出可用的 WFS 层和 2) 将特定层 (SIC) 作为 Spatial(Points)DataFrame 读入 R。

我试过几个其他的WFS服务器,但都不行。 我总是收到警告:

Cannot open data source

检查 WFS 驱动程序我得到以下结果:

> "WFS" %in% ogrDrivers()$name
[1] FALSE

WFS 驱动程序似乎没有在 rgdal 中实现(不再?) 或者为什么有那么多例子"claiming"相反?

我也尝试了 gdalUtils 包,它运行良好,但它给出了 ogrinfo.exe 的整个控制台消息,而不仅仅是可用层。(我猜它 "just" 调用ogrinfo.exe 并将结果发送回 R,就像使用 r shellsystem 命令一样)。

好吧,有谁知道我做错了什么,或者如果 rgdal 或任何类似的软件包甚至可能出现类似的情况?

您可以结合使用这两个包来完成您的任务。

首先,使用 gdalUtils 将您需要的图层转换为本地 shapefile。然后,照常使用 rgdal。注意:您会在 ogr2ogr 调用后看到一条警告消息,但它为我执行了正确的转换。此外,如果 overwrite 参数为 TRUEogr2ogr 将不会覆盖本地文件(还有其他可能有用的参数)。

library(gdalUtils)
library(rgdal)

dsn <- "WFS:http://geomap.reteunitaria.piemonte.it/ws/gsareprot/rp-01/areeprotwfs/wfs_gsareprot_1?service=WFS&request=getCapabilities"

ogrinfo(dsn, so=TRUE)
## [1] "Had to open data source read only."
## [2] "INFO: Open of `WFS:http://geomap.reteunitaria.piemonte.it/ws/gsareprot/rp-01/areeprotwfs/wfs_gsareprot_1?service=WFS&request=getCapabilities'"
## [3] "      using driver `WFS' successful."
## [4] "1: AreeProtette"
## [5] "2: ZPS"  
## [6] "3: SIC"

ogr2ogr(dsn, "sic.shp", "SIC")

sic <- readOGR("sic.shp", "sic", stringsAsFactors=FALSE)
## OGR data source with driver: ESRI Shapefile 
## Source: "sic.shp", layer: "sic"
## with 128 features
## It has 23 fields

plot(sic)

str(sic@data)

## 'data.frame': 128 obs. of  23 variables:
##  $ gml_id    : chr  "SIC.510" "SIC.472" "SIC.470" "SIC.508" ...
##  $ objectid  : chr  "510" "472" "470" "508" ...
##  $ inspire_id: chr  NA NA NA NA ...
##  $ codice    : chr  "IT1160026" "IT1160017" "IT1160018" "IT1160020" ...
##  $ nome      : chr  "Faggete di Pamparato, Tana del Forno, Grotta delle Turbiglie e Grotte di Bossea" "Stazione di Linum narbonense" "Sorgenti del T.te Maira, Bosco di Saretto, Rocca Provenzale" "Bosco di Bagnasco" ...
##  $ cod_tipo  : chr  "B" "B" "B" "B" ...
##  $ tipo      : chr  "SIC" "SIC" "SIC" "SIC" ...
##  $ cod_reg_bi: chr  "1" "1" "1" "1" ...
##  $ des_reg_bi: chr  "Alpina" "Alpina" "Alpina" "Alpina" ...
##  $ mese_istit: chr  "11" "11" "11" "11" ...
##  $ anno_istit: chr  "1996" "1996" "1996" "1996" ...
##  $ mese_ultmo: chr  "2" NA NA NA ...
##  $ anno_ultmo: chr  "2002" NA NA NA ...
##  $ sup_sito  : chr  "29396102.9972" "82819.1127" "7272687.002" "3797600.3563" ...
##  $ perim_sito: chr  "29261.8758" "1227.8846" "17650.289" "9081.4963" ...
##  $ url1      : chr  "http://gis.csi.it/parchi/schede/IT1160026.pdf" "http://gis.csi.it/parchi/schede/IT1160017.pdf" "http://gis.csi.it/parchi/schede/IT1160018.pdf" "http://gis.csi.it/parchi/schede/IT1160020.pdf" ...
##  $ url2      : chr  "http://gis.csi.it/parchi/carte/IT1160026.djvu" "http://gis.csi.it/parchi/carte/IT1160017.djvu" "http://gis.csi.it/parchi/carte/IT1160018.djvu" "http://gis.csi.it/parchi/carte/IT1160020.djvu" ...
##  $ fk_ente   : chr  NA NA NA NA ...
##  $ nome_ente : chr  NA NA NA NA ...
##  $ url3      : chr  NA NA NA NA ...
##  $ url4      : chr  NA NA NA NA ...
##  $ tipo_geome: chr  "poligono" "poligono" "poligono" "poligono" ...
##  $ schema    : chr  "Natura2000" "Natura2000" "Natura2000" "Natura2000" ...

提问者和回答者都没有说rgdal是怎么安装的。如果它是 Windows 或 OSX 的 CRAN 二进制文件,它可能比独立安装 GDAL 底层 gdalUtils 具有更小的驱动程序集。始终说明您的平台,以及 rgdal 是二进制安装的还是从源代码安装的,并始终提供显示为 rgdal 加载的消息的输出,以及 sessionInfo() 的输出以显示您所在的平台 运行。

鉴于驱动程序集可能存在差异,给出的建议似乎是合理的。