Lon-Lat zu Simple Features (sfg und sfc) in R


20

Wie kann ich Lon-Lat-Punkte in einfache Features (sfg) konvertieren und sie dann in eine einfache Feature-Sammlung (sfc) einfügen?

Hier ist ein MWE, der nicht funktioniert, dem ich aber am nächsten gekommen bin.

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)

Ich versuche, Simple Features zu erlernen (weshalb ich die Bibliothek sp nicht verwenden möchte) und muss später st_buffer auf dem sfc ausführen.

Vielleicht ist es besser, die sfc direkt zu erstellen, ohne eine sfg pro Punkt?

Ich verwende data.table aus Geschwindigkeitsgründen (zehntausende von Punkten, die auch ohne geografische Aspekte analysiert werden).

Ich glaube, ich brauche eine sfc von sfg-Punkten und keine MULTIPOINT-sfg.


Eine ähnliche Frage wurde auf SO gestellt: stackoverflow.com/questions/29736577/…
andschar

Antworten:


32

Haben Sie versucht, mit st_as_sf () ein Objekt (sp, dataframe, ...) in ein sf- Objekt zu konvertieren ?

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] Wie von cengel kommentiert, wäre es wichtig, mit der raschen Entwicklung dieses Pakets Schritt zu halten.


2
Das Ausführen dieses Codes gibt mir einen Fehler:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel

2
@cengel Danke, wies darauf hin. Als ich diese Antwort veröffentlichte (Januar 2017), war die Version des sf- Pakets 0.2-7, bei der das Argument relation_to_geometry verwendet wurde . Ich bestätige, dass das neueste sf (0.3-4: Mar 2017) den Fehler in Ihrem Kommentar zurückwirft. Nun muss das Argument agr sein (wie von @ jeffrey-evans kommentiert).
Kazuhito
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.