st_simplify dTolerence с десятичной степенью - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь уменьшить размер объекта sf, применяя st_simplify. CRS 4267 и попробуйте поиграть с правильным уровнем dTolerance. Я понимаю, что единицей измерения dTolerance должна быть единица CRS, поэтому я начал с 0.1, но постоянно получаю это сообщение об ошибке.

test <- st_read("comm_sf.shp") %>%
+   st_simplify(preserveTopology = T,
+               dTolerance = 0.1)
Simple feature collection with 11321 features and 21 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -124.4375 ymin: 24.5441 xmax: -66.94983 ymax: 49.00249
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Warning message:
In st_simplify.sfc(st_geometry(x), preserveTopology, dTolerance) :
  st_simplify does not correctly simplify longitude/latitude data, dTolerance needs to be in decimal degrees

Я играю с настройками dTolerance = 1000 (если это в метрах) и dTolerance = 0.1 (если это в long / lat), но я получаю одно и то же сообщение об ошибке. Это также происходит с CRS = 4267. Как я могу это исправить?

1 Ответ

2 голосов
/ 31 января 2020

Ну, это скорее предупреждение, чем ошибка. Но в целом вы должны выполнять Дугласа-Пекера в проекционной системе координат - потому что она использует расстояние в качестве буфера, тогда как фактический размер единицы долготы зависит от широты. Обратите внимание, что единица измерения, используемая допуском st_simplify, всегда будет такой же, как и единицы карты.

Вот воспроизводимый пример:

library(sf)
library(maptools)

states = st_as_sf(maps::map("state", plot = FALSE, fill = TRUE))
states_simple = st_simplify(states)
##Warning message:
##  In st_simplify.sfc(st_geometry(x), preserveTopology, dTolerance) :
##  st_simplify does not correctly simplify longitude/latitude data, dTolerance needs to be in decimal degrees

Но если мы сначала преобразуем в спроецированную систему координат, тогда нет предупреждения:

states = st_transform(states, 54032) #azimuthal equidistant
states_simple = st_simplify(states)

Вы всегда можете go вернуться к WGS84 lat-long после упрощения

 states = st_transform(states, 4326) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...