列出可用的 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 shell
或 system
命令一样)。
好吧,有谁知道我做错了什么,或者如果 rgdal
或任何类似的软件包甚至可能出现类似的情况?
您可以结合使用这两个包来完成您的任务。
首先,使用 gdalUtils
将您需要的图层转换为本地 shapefile。然后,照常使用 rgdal
。注意:您会在 ogr2ogr
调用后看到一条警告消息,但它为我执行了正确的转换。此外,如果 overwrite
参数为 TRUE
,ogr2ogr
将不会覆盖本地文件(还有其他可能有用的参数)。
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() 的输出以显示您所在的平台 运行。
鉴于驱动程序集可能存在差异,给出的建议似乎是合理的。
根据不同的来源,我有以下问题它应该能够使用 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 shell
或 system
命令一样)。
好吧,有谁知道我做错了什么,或者如果 rgdal
或任何类似的软件包甚至可能出现类似的情况?
您可以结合使用这两个包来完成您的任务。
首先,使用 gdalUtils
将您需要的图层转换为本地 shapefile。然后,照常使用 rgdal
。注意:您会在 ogr2ogr
调用后看到一条警告消息,但它为我执行了正确的转换。此外,如果 overwrite
参数为 TRUE
,ogr2ogr
将不会覆盖本地文件(还有其他可能有用的参数)。
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() 的输出以显示您所在的平台 运行。
鉴于驱动程序集可能存在差异,给出的建议似乎是合理的。