我正在尝试使用通过WFS分发的法国空间数据。我想在允许用户更新数据的Shiny应用程序中使用这些数据,所以我真的更喜欢使用WFS,而不仅仅是将来自shapefile的数据嵌入应用程序中。
我可以获取数据,但是从某种意义上来说,它似乎有所偏离(坐标似乎已经颠倒了(X代替Y,Y代替X代替)),从而产生了法国的怪异景象。我对空间分析和数据的细节不是很熟悉,并且肯定缺少一些东西。
我使用功能st_read导入了数据,该功能与WFS服务的链接一起提供。然后,我得到了法国水文网络的上下图。但是,当我使用相同的WFS链接连接QGIS时,地图是正确的,因此我猜SF和QGIS不能以相同的方式完全处理事物,但是调查原因超出了我的理解范围。
在查看边界框时,我们看到x的返回值与y的期望值相对应,反之亦然。
我遇到了由同一提供者(http://www.sandre.eaufrance.fr/)使用WFS分发的两个不同数据集的问题。第一个是显示点,数据包含XY坐标,因此我删除了几何图形,并使用st_as_sf并在coords参数中将X和Y字段的名称转换为数据框。这是一个肮脏的解决方法,但不适用于我的第二个具有MULTILINESTRING几何图形的数据集。因此,我希望以一种正确的格式导入/转换数据的干净方法。
这是重现意外行为的最小代码示例。
library(dplyr)
library(sf)
library(ggplot2)
data <- st_read("http://services.sandre.eaufrance.fr/geo/zon_FXX?Request=GetCapabilities&SERVICE=WFS&VERSION=1.1.0",
layer = "SegClassContinuiteEco_Liste2",
stringsAsFactors = FALSE)
st_bbox(data)
ggplot() +
geom_sf(data = data)
上面的代码给出了这张地图: wrong map
正确的地图应如下所示(我旋转并翻转了原图): correct map
我的sessionInfo:
R version 3.5.3 (2019-03-11)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sf_0.7-3 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.0.1 purrr_0.3.2
[6] readr_1.3.1 tidyr_0.8.3 tibble_2.1.1 ggplot2_3.1.1 tidyverse_1.2.1
loaded via a namespace (and not attached):
[1] Rcpp_1.0.1 cellranger_1.1.0 pillar_1.3.1 compiler_3.5.3
[5] plyr_1.8.4 class_7.3-15 tools_3.5.3 jsonlite_1.6
[9] lubridate_1.7.4 gtable_0.3.0 nlme_3.1-137 lattice_0.20-38
[13] pkgconfig_2.0.2 rlang_0.3.4 DBI_1.0.0 cli_1.1.0
[17] rstudioapi_0.10 yaml_2.2.0 haven_2.1.0 e1071_1.7-1
[21] withr_2.1.2 xml2_1.2.0 httr_1.4.0 fs_1.2.7
[25] generics_0.0.2 hms_0.4.2.9001 classInt_0.3-1 grid_3.5.3
[29] tidyselect_0.2.5 glue_1.3.1 R6_2.4.0 fansi_0.4.0
[33] readxl_1.3.1 modelr_0.1.4 magrittr_1.5 usethis_1.5.0
[37] units_0.6-2 backports_1.1.4 scales_1.0.0 rvest_0.3.2
[41] assertthat_0.2.1 colorspace_1.4-1 utf8_1.1.4 stringi_1.4.3
[45] lazyeval_0.2.2 munsell_0.5.0 broom_0.5.2 crayon_1.3.4
感谢您提供给我的任何建议。
塞德里克
答案 0 :(得分:0)
我也无法下载您的数据。要交换y和x,您可能需要尝试
d = st_geometry(data)
drev = d * matrix(c(0,1,1,0), 2, 2)
st_geometry(data) = drev
如果您可以某种形式使用数据集,那将是很棒的,PROJ 6和WKT2轴顺序应得到照顾,希望也可以由sf处理。