Lon-Lat aux fonctionnalités simples (sfg et sfc) dans R

20

Comment puis-je convertir des points lon-lat en fonctionnalités simples (sfg), puis les placer dans une collection de fonctionnalités simples (sfc)?

Voici un MWE qui ne fonctionne pas mais qui est le plus proche de moi.

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)

J'essaie d'apprendre des fonctionnalités simples (c'est pourquoi je ne veux pas utiliser la bibliothèque sp), et je dois plus tard exécuter st_buffer sur le sfc.

Peut-être mieux de créer le sfc directement, sans sfg par point?

J'utilise data.table pour des raisons de vitesse (10 000s de milliers de points qui sont également analysés sans aspects géographiques).

Je pense que j'ai besoin d'un sfc de points sfg, et non d'un sfg MULTIPOINT.

Chris
la source
une question similaire a été posée sur SO: stackoverflow.com/questions/29736577/…
andschar

Réponses:

32

Avez-vous essayé st_as_sf () qui convertit un objet (sp, dataframe, ...) en un objet 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)

[Mise à jour] Comme l'a commenté cengel, il serait important de suivre le développement rapide de ce paquet.

Kazuhito
la source
2
L'exécution de ce code me donne une erreur:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel
2
@cengel Merci de le souligner. Lorsque j'ai posté cette réponse (janvier 2017), la version du package sf était de 0,2 à 7, qui utilisait l' argument relation_to_geometry . Je confirme que le dernier sf (0.3-4: mars 2017) renvoie l'erreur dans votre commentaire. Maintenant, l'argument doit être agr (comme l'a commenté @ jeffrey-evans).
Kazuhito