Các tính năng đơn giản của Lon-Lat (sfg và sfc) trong R


20

Làm cách nào tôi có thể chuyển đổi các điểm lon-lat thành các tính năng đơn giản (sfg), sau đó đặt chúng vào một bộ sưu tập tính năng đơn giản (sfc)?

Đây là một MWE không hoạt động nhưng là gần nhất tôi đã nhận được.

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)

Tôi đang cố gắng tìm hiểu các tính năng đơn giản (đó là lý do tại sao tôi không muốn sử dụng thư viện sp) và sau đó cần chạy st_buffer trên sfc.

Có lẽ tốt hơn để tạo sfc trực tiếp, không có sfg mỗi điểm?

Tôi sử dụng data.table vì lý do tốc độ (10.000 điểm trong số hàng ngàn điểm cũng được phân tích mà không có khía cạnh địa lý).

Tôi nghĩ rằng tôi cần một sfc của sfg-points chứ không phải MULTIPOINT-sfg.


câu hỏi tương tự đã được hỏi trên SO: stackoverflow.com/questions/29736577/ từ
andschar

Câu trả lời:


32

Bạn đã thử st_as_sf () chuyển đổi đối tượng (sp, dataframe, ...) thành đối tượng sf chưa?

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)

[Cập nhật] Như nhận xét của cengel, điều quan trọng là phải theo kịp sự phát triển nhanh chóng của gói này.


2
Chạy mã này cho tôi một lỗi:Error in st_sf(x, ..., agr = agr) : no simple features geometry column present
cengel 17/03/2017

2
@cengel Cảm ơn chỉ ra rằng. Khi tôi đăng câu trả lời này (tháng 1 năm 2017), phiên bản của gói sf là 0,2-7, sử dụng đối số quan hệ_to_geometry . Tôi xác nhận sf mới nhất (0,3-4: Mar 2017) ném lại lỗi trong bình luận của bạn. Bây giờ đối số phải là agr (như nhận xét của @ jeffrey-evans).
Kazuhito
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.