Lon-Lat для простых функций (sfg и sfc) в R

20

Как я могу преобразовать точки lon-lat в простые объекты (sfg), а затем поместить их в простой набор объектов (sfc)?

Вот MWE, который не работает, но самый близкий, который я получил.

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)

Я пытаюсь изучить простые функции (именно поэтому я не хочу использовать библиотеку sp), и позже мне нужно запустить st_buffer на sfc.

Может быть, лучше создать SFC напрямую, без SFC в каждой точке?

Я использую data.table по соображениям скорости (10 000 тысяч точек, которые также анализируются без географических аспектов).

Я думаю, что мне нужен sfc sfg-points, а не MULTIPOINT-sfg.

Крис
источник
аналогичный вопрос был задан на SO: stackoverflow.com/questions/29736577/…
andschar

Ответы:

32

Вы пробовали st_as_sf (), который преобразует объект (sp, dataframe, ...) в объект 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)

[Обновление] Как прокомментировал cengel, было бы важно не отставать от быстрого развития этого пакета.

Казухито
источник
2
Запуск этого кода дает мне ошибку:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel
2
@cengel Спасибо, что указал на это. Когда я писал этот ответ (Jan 2017) версия НФ пакет был 0.2-7, который использовал relation_to_geometry аргумент. Я подтверждаю, что последний sf (0.3-4: март 2017) возвращает ошибку в вашем комментарии. Теперь аргумент должен быть agr (как прокомментировал @ jeffrey-evans).
Казухито