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


20

Як я можу конвертувати точки лон-лат у прості функції (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 безпосередньо, без sfg за очко?

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

Я думаю, що мені потрібен sfc sfg-точок, а не MULTIPOINT-sfg.


Аналогічне питання було поставлено на SO: stackoverflow.com/questions/29736577 / ...
andschar

Відповіді:


32

Ви спробували st_as_sf (), який перетворює об'єкт (sp, кадр даних, ...) в 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).
Kazuhito
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.