Lon-Lat na proste funkcje (sfg i sfc) w R.

20

Jak przekonwertować punkty lon-lat na proste funkcje (sfg), a następnie umieścić je w prostej kolekcji funkcji (sfc)?

Oto MWE, które nie działa, ale jest najbliższe, na jakie się natknąłem.

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)

Próbuję nauczyć się prostych funkcji (dlatego nie chcę korzystać z biblioteki sp), a później muszę uruchomić st_buffer na sfc.

Może lepiej stworzyć SFFC bezpośrednio, bez SFF za punkt?

Używam data.table ze względu na szybkość (10 000 tysięcy punktów, które są również analizowane bez aspektów geograficznych).

Myślę, że potrzebuję sfc punktów sfg, a nie MULTIPOINT-sfg.

Chris
źródło
podobne pytanie zadano na SO: stackoverflow.com/questions/29736577/…
andschar

Odpowiedzi:

32

Czy próbowałeś już st_as_sf (), która konwertuje obiekt (sp, dataframe, ...) na obiekt 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)

[Aktualizacja] Jak skomentował cengel, ważne jest, aby nadążyć za szybkim rozwojem tego pakietu.

Kazuhito
źródło
2
Uruchomienie tego kodu powoduje błąd:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel
2
@cengel Dzięki, wskazując na to. Kiedy pisał tę odpowiedź (Jan 2017) wersja sf pakietu było 0.2-7, który używany relation_to_geometry argumentem. Potwierdzam, że najnowszy sf (0.3-4: marzec 2017) zwrócił błąd w twoim komentarzu. Teraz argumentem musi być agr (jak komentuje @ jeffrey-evans).
Kazuhito,