18

How can I convert lon-lat points to simple features (sfg), and then put them in a simple feature collection (sfc)?

Here is a MWE that doesn't work but is the closest I have gotten to.

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)

I'm trying to learn Simple Features (which is why I do not want to use library sp), and later need to run st_buffer on the sfc.

Maybe better to create the sfc directly, without an sfg per point?

I use data.table for speed-reasons (10,000s of thousands of points that are also analysed without geographical aspects).

I think I need an sfc of sfg-points, and not a MULTIPOINT-sfg.

28

Have you tried st_as_sf() which converts object (sp, dataframe, ...) to an sf object?

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)

[Update] As commented by cengel, it would be important to keep up with rapid development of this package.

  • 2
    Running this code gives me an error: Error in st_sf(x, ..., agr = agr) : no simple features geometry column present – cengel Mar 17 '17 at 16:23
  • 2
    @cengel Thanks pointing out that. When I posted this answer (Jan 2017) the version of sf package was 0.2-7, which used relation_to_geometry argument. I confirm the latest sf (0.3-4: Mar 2017) throws back the error in your comment. Now the argument has to be agr (as commented by @jeffrey-evans). – Kazuhito Mar 17 '17 at 22:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.