4

根据不同的来源,我有以下问题,它应该能够使用rgdal.

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 中实现(不再?)或者为什么有这么多“声称”相反的例子?

我也试过这个gdalUtils包,它工作得很好,但它给出了 ogrinfo.exe 的整个控制台消息,而不仅仅是可用的层。(我猜它“只是”调用 ogrinfo.exe 并将结果发送回 R 就像使用rshellsystem命令)。

那么有谁知道我做错了什么,或者如果类似的东西甚至可以使用rgdal或任何类似的包?

4

2 回答 2

6

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

首先,使用 . 将您需要的图层转换为本地 shapefile gdalUtils。然后,rgdal正常使用。注意:通话后您会看到一条警告消息,ogr2ogr但它对我来说执行了转换。此外,在没有参数的ogr2ogr情况下不会覆盖本地文件(还有其他参数也可能有用)。overwriteTRUE

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" ...
于 2015-08-16T11:40:30.557 回答
0

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

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

于 2015-09-30T18:59:41.363 回答