39 votos

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

¿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 lo más cercano que he conseguido.

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 las características simples (por lo que no quiero usar la biblioteca sp), y más tarde necesito ejecutar st_buffer en el sfc.

¿Tal vez 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 un sfc de puntos sfg, y no un MULTIPOINT-sfg.

61voto

ghotan Puntos 29

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

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)

Como comentado por @cengel Sería importante mantenerse al día con el rápido desarrollo de este paquete.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X