Lon-Lat to คุณสมบัติง่าย ๆ (sfg และ sfc) ใน R


21

ฉันจะแปลงคะแนน lon-lat ให้เป็นฟีเจอร์ง่าย ๆ (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,000 คะแนนจากคะแนนนับพันที่วิเคราะห์โดยไม่มีประเด็นทางภูมิศาสตร์)

ฉันคิดว่าฉันต้องการ sfc ของ sfg-points และไม่ใช่ MULTIPOINT-sfg


คำถามที่คล้ายกันถูกถามใน SO: stackoverflow.com/questions/29736577/…
andschar

คำตอบ:


32

คุณลองst_as_sf ()ซึ่งแปลงวัตถุ (sp, dataframe, ... ) ไปเป็นวัตถุ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 ขอบคุณชี้ให้เห็นว่า เมื่อผมโพสต์คำตอบนี้ (มกราคม 2017) รุ่นของเอสเอฟแพคเกจเป็น 0.2-7 ซึ่งสินค้าrelation_to_geometryโต้แย้ง ฉันยืนยันเอสเอฟล่าสุด(0.3-4: มี.ค. 2017) ส่งข้อผิดพลาดกลับมาในความคิดเห็นของคุณ ตอนนี้อาร์กิวเมนต์ต้องเป็นagr (ตามความเห็นของ @ jeffrey-evans)
Kazuhito
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.