Проблема обратных координат (XY) при импорте данных WFS с помощью st_read - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь использовать французские пространственные данные, распространяемые с использованием WFS. Я хочу использовать эти данные в приложении Shiny, которое позволяет пользователю обновлять данные, поэтому я действительно предпочел бы использовать WFS, а не только вставлять данные из шейп-файла в приложение.

Я могу получить данные, но с этим что-то не так в том смысле, что координаты, кажется, были перевернуты (X вместо Y и Y вместо X), что приводит к странной картине Франции. Я не очень знаком с деталями пространственного анализа и данных, и я, безусловно, что-то упускаю.

Я импортировал данные, используя функцию st_read, которую я поставил со ссылкой на сервис WFS. Затем я получаю перевернутую карту французской гидрографической сети. Однако, когда я подключаю QGIS по той же ссылке WFS, карта верна, поэтому я полагаю, что sf и QGIS не совсем одинаково обрабатывают вещи, но выясняют, почему мне не известно.

Глядя на ограничивающую рамку, мы видим, что значения, возвращаемые для x, соответствуют ожидаемым для y и наоборот.

У меня была проблема с двумя разными наборами данных, распределенными с использованием WFS одним и тем же провайдером (http://www.sandre.eaufrance.fr/).). Первый отображал точки, а данные содержали координаты XY, поэтому я удалил геометрию и преобразовал фрейм данных с помощью st_as_sf. с именами полей 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)

Код выше дает эту карту: неправильная карта

Правильная карта должна выглядеть так (я повернул и перевернул оригинал): правильная карта

Моя сессия Информация:

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 

Спасибо за любой совет, который вы могли бы дать мне.

Седрик

1 Ответ

0 голосов
/ 17 мая 2019

Я также не могу загрузить ваши данные.Чтобы поменять местами y и x, вы можете попробовать

d = st_geometry(data)
drev = d * matrix(c(0,1,1,0), 2, 2)
st_geometry(data) = drev

Было бы здорово, если бы вы могли сделать свой набор данных доступным в некоторой форме, с порядком координат PROJ 6 и WKT2 следует позаботиться, надеюсь, такженаучная фантастика

...