Lon-Lat para recursos simples (sfg e sfc) em R

20

Como converter pontos long-lat em recursos simples (sfg) e depois colocá-los em uma coleção de recursos simples (sfc)?

Aqui está um MWE que não funciona, mas é o mais próximo que eu cheguei.

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)

Estou tentando aprender Recursos Simples (é por isso que não quero usar a biblioteca sp) e, posteriormente, preciso executar o st_buffer no sfc.

Talvez seja melhor criar o sfc diretamente, sem um sfg por ponto?

Uso data.table por motivos de velocidade (10.000 milhões de pontos que também são analisados ​​sem aspectos geográficos).

Acho que preciso de um sfc de sfg-points, e não de um MULTIPOINT-sfg.

Chris
fonte
pergunta semelhante foi feita no SO: stackoverflow.com/questions/29736577/…
andschar

Respostas:

32

Você já tentou st_as_sf () que converte objeto (sp, dataframe, ...) em um 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)

[Atualização] Como comentado por cengel, seria importante acompanhar o rápido desenvolvimento deste pacote.

Kazuhito
fonte
2
Executar esse código me dá um erro:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
Cengel
2
@ cengel Obrigado por apontar isso. Quando publiquei esta resposta (janeiro de 2017), a versão do pacote sf era 0.2-7, que usava o argumento relationship_to_geometry . Confirmo que o sf mais recente (0.3-4: mar 2017) lança de volta o erro no seu comentário. Agora, o argumento deve ser agr (como comentado por @ jeffrey-evans).
Kazuhito