Lon-Lat a funzioni semplici (sfg e sfc) in R


20

Come posso convertire i punti lon-lat in funzioni semplici (sfg) e poi inserirli in una raccolta di funzioni semplici (sfc)?

Ecco un MWE che non funziona ma è il più vicino a cui sono arrivato.

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)

Sto cercando di apprendere le funzionalità semplici (motivo per cui non voglio usare la libreria sp), e in seguito ho bisogno di eseguire st_buffer su sfc.

Forse è meglio creare lo sfc direttamente, senza sfg per punto?

Uso data.table per motivi di velocità (10.000 di migliaia di punti che vengono analizzati anche senza aspetti geografici).

Penso di aver bisogno di uno sfc di sfg-points e non di un MULTIPOINT-sfg.


domanda simile è stato chiesto su SO: stackoverflow.com/questions/29736577/...
andschar

Risposte:


32

Hai provato st_as_sf () che converte l'oggetto (sp, dataframe, ...) in un oggetto 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)

[Aggiornamento] Come commentato da Cengel, sarebbe importante tenere il passo con il rapido sviluppo di questo pacchetto.


2
L'esecuzione di questo codice mi dà un errore:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel

2
@cengel Grazie per averlo sottolineato. Quando ho pubblicato questa risposta (gennaio 2017) la versione del pacchetto sf era 0.2-7, che utilizzava l' argomento relationship_to_geometry . Confermo che l'ultima sf (0.3-4: Mar 2017) restituisce l'errore nel tuo commento. Ora l'argomento deve essere agr (come commentato da @ jeffrey-evans).
Kazuhito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.