Lon-Lat para características simples (sfg y sfc) en R

16

¿Cómo puedo convertir los puntos lon-lat en funciones simples (sfg), y luego ponerlos en una colección de características simple (sfc)?

Aquí hay un MWE que no funciona pero es lo más cerca que he estado.

library(data.table)
library(sf)
# The DT data.table is the data I have (but 10,000s of rows, each row is a point)
DT <- data.table(
    place=c("Finland", "Canada", "Tanzania", "Bolivia", "France"),
    longitude=c(27.472918, -90.476303, 34.679950, -65.691146, 4.533465),
    latitude=c(63.293001, 54.239631, -2.855123, -13.795272, 48.603949),
    crs="+proj=longlat +datum=WGS84")
DT[, rowid:=1:.N]
# The following two rows do not work
DT[, place.sfg:=st_point(x=c(longitude, latitude), dim="XY"), by=rowid]
places.sfc <- st_sfc(DT[, place.sfg], crs=DT[, crs])
# This should result in five points, which it doesn't
plot(places.sfc)

Estoy tratando de aprender características simples (por lo que no quiero usar library sp), y más tarde necesito ejecutar st_buffer en el sfc.

¿Quizás sea mejor crear el sfc directamente, sin un sfg por punto?

Utilizo data.table por razones de velocidad (10,000s de miles de puntos que también se analizan sin aspectos geográficos).

Creo que necesito una fuente de puntos-sfg, y no una fuente-MULTIPUNTO

.     
pregunta Chris 01.01.2017 - 23:39

1 respuesta

23

¿Has probado st_as_sf () que convierte el objeto (sp, dataframe, ...) en un objeto sf ?

library(data.table)
library(sf)
# your data (removed crs column)
DT <- data.table(
                 place=c("Finland", "Canada", "Tanzania", "Bolivia", "France"),
                 longitude=c(27.472918, -90.476303, 34.679950, -65.691146, 4.533465),
                 latitude=c(63.293001, 54.239631, -2.855123, -13.795272, 48.603949))
# st_as_sf() ######
# sf version 0.2-7
DT_sf = st_as_sf(DT, coords = c("longitude", "latitude"), 
                 crs = 4326, relation_to_geometry = "field")
# sf version 0.3-4, 0.4-0
DT_sf = st_as_sf(DT, coords = c("longitude", "latitude"), 
                 crs = 4326, agr = "constant")
plot(DT_sf)

[Actualización] Como comentó cengel, sería importante mantenerse al día con el rápido desarrollo de este paquete.

    
respondido por el Kazuhito 06.01.2017 - 00:49

Lea otras preguntas en las etiquetas