R перетворять sf-об'єкт назад в SpatialPolygonsDataFrame


27

Як перетворити sf-об’єкт назад в SpatialPolygonsDataFrame?

Я використовую R 3.4.0 і sf версії 0.4.1. У документації sf згадується as_Spatialфункція, але ця функція недоступна в моїй установці (чомусь).


Метод примусу доступний в sf 0.4-1, що відбувається при спробі викликати функцію?
Джефрі Еванс

2
as (sf, "Просторовий")
mdsumner

@ Джефрі Еванс, відповідь Казухіто нижче повторює проблему (і надає часткове рішення)
Саймон

Відповіді:


38

я використав

 as(nc, 'Spatial')

як частина 2 віньєтки Едзера Пебесма вказана (Прокрутіть донизу сторінки).


бачив це. Однак я з’ясував це лише нещодавно, і відчув заклик поставити його на належну відповідь, побачивши це запитання;)
andschar

І важливо, що прийнята відповідь не залишиться поза увагою майбутніми читачами.
Казухіто

1
Для цього по - справжньому працювати , як SPDF, мені потрібно було зробити що - щось на кшталт: tmp <-as(nc, 'Spatial'), то tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))тодіrow.names(tmp) <- tmpid
Simon

1
що означає "справді працює як SPDF"? Я не бачу недоліків, створених конверсією.
andschar

8

Мені довелося використовувати sf:::as_Spatial()як вирішення.

library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))

# sf -> sp
nc_sp <- as_Spatial(nc$geom)      # Error: could not find function "as_Spatial"

nc_sp <- sf:::as_Spatial(nc$geom) # This works

library(sp)
plot(nc_sp)

Чи є спосіб зберегти рамку даних недоторканою?
Симон

Під as(sf, "Spatial")керуванням @mdsumner, я підтверджую, що він створює SpatialPolygonsDataFrame, що краще відповідає вашим вимогам. Здається, as_Spatial()потрібен лише sfc (тобто геометрія).
Казухіто

1
Ця функція є методом і вимагає виклику, використовуючи як (). Він не експортується як об'єкт функції, тому для його прямого виклику вам потрібно ":::".
Джефрі Еванс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.