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

20

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

Aquí hay un MWE que no funciona, pero es el más cercano al que he llegado.

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 eso no quiero usar la biblioteca sp), y luego 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.000 de miles de puntos que también se analizan sin aspectos geográficos).

Creo que necesito un sfc de puntos sfg, y no un sfg MULTIPOINT.

Chris
fuente
se hizo una pregunta similar en SO: stackoverflow.com/questions/29736577/…
andschar

Respuestas:

32

¿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.

Kazuhito
fuente
2
Ejecutar este código me da un error:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel
2
@cengel Gracias por señalar eso. Cuando publiqué esta respuesta (enero de 2017), la versión del paquete sf era 0.2-7, que usaba el argumento relacion_de_geometría . Confirmo que el último sf (0.3-4: Mar 2017) arroja el error en su comentario. Ahora el argumento tiene que ser agr (como comentó @ jeffrey-evans).
Kazuhito