ошибка при построении карты объединенных sf-геометрий в R с ggplot2 - PullRequest
0 голосов
/ 17 ноября 2018

Я использовал шейп-файл из набора ячеек сетки, чтобы создавать карты без проблем. Недавно мне дали немного другой шейп-файл ячеек сетки и попросили объединить их и заново сгенерировать те же карты. Теперь, когда я соединил два sf-объекта, я не могу получить карту для построения.

Я не уверен, как создать представление для этого. Сами шейп-файлы свободно доступны как caltrawl.zip и CRFS/MAN_CA_CRFS_microblocks2013.zip здесь: ftp: //ftp.dfg.ca.gov/R7_MR/MANAGEMENT/

Вот оригинальный код, который хорошо отображается (это просто для суммирования "микроблоков" до разрешения, представляющего интерес для создания более крупного / меньшего объекта):

microblocks <- read_sf("CRFS_microblocks/MAN_CA_CRFS_microblocks2013.shp") 

blocks1 <- microblocks %>% 
  st_buffer(0) %>% # magical function that prevents errors when combining polygons below 
  group_by(BLOCK10_ID) %>% # so it doesn't just lump into one giant polygon ... 
  mutate(
    Xmean = mean(X),
    Ymean = mean(Y)
  ) %>% 
  ungroup() %>% 
  group_by(BLOCK10_ID, Xmean, Ymean) %>% 
  summarise() %>% # should yield a sf object 
  ungroup() %>% 
  st_transform(crs="+proj=longlat +datum=NAD83") 

И ggplot(blocks1) + geom_sf() отлично работает.

Однако, когда я пытаюсь присоединиться ко второй геометрии caltrawl ...

caltrawl <- read_sf("caltrawl/caltrawl.shp") %>% 
  dplyr::select(BLOCK10_ID) %>% 
blocks2 <- microblocks %>% 
  st_buffer(0) %>% # magical function that prevents errors when combining polygons below 
  group_by(BLOCK10_ID) %>% # so it doesn't just lump into one giant polygon ... 
  mutate(
    Xmean = mean(X),
    Ymean = mean(Y)
  ) %>% 
  ungroup() %>% 
  group_by(BLOCK10_ID, Xmean, Ymean) %>% 
  summarise() %>% # should yield a sf object 
  ungroup() %>% 
  dplyr::select(-Xmean, -Ymean) %>% # since we're adding more blocks 
  as.data.frame() %>% # necessary to de-sf-ify to join the other blocks
  full_join(caltrawl, by="BLOCK10_ID") %>% # full join retains blocks from both
  st_sf(sf_column_name = 'geometry.x') %>% 
  st_transform(crs="+proj=longlat +datum=NAD83")   as.data.frame()

Я получаю объект, который отлично отображается как plot(blocks2), но когда я пытаюсь ggplot(blocks2) + geom_sf(), я получаю следующую ошибку:

Don't know how to automatically pick scale for object of type standardGeneric. Defaulting to continuous.
Error: Column `geometry` must be a 1d atomic vector or a list

Стоит также отметить, что оба они являются sf-объектами, но классы несколько отличаются:

> class(blocks1)
[1] "sf"         "tbl_df"     "tbl"        "data.frame"
> class(blocks2)
[1] "sf"         "data.frame"

Что я делаю не так в blocks2 случае?

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