r - SF:从 UTM 到纬度/经度
问题描述
我有一组 UTM 公制点,我想使用 sf 环境将其转换为纬度和经度小数点。
我拥有的数据集如下所示:
df <- data.frame(longitude=c(4585434,4588904,4586694),
latitude=c(430060.8,430960.8,432427.2),
street=c("74 JOSEP SERRANO", "30 LLOBERA","4 SANT ILDEFONS"),
number=c(45,68,34))
我一直只能在sp框架下做。
dfevpo <- SpatialPoints(df[, c("longitude","latitude")], proj4string=CRS("+proj=utm +zone=10"))
longlats <- spTransform(dfevpo, CRS("+proj=longlat")) #transform
longlats.df <- as.data.frame(longlats)
longlats.df$.id <- as.numeric(rownames(longlats.df))
但是,生成的longlats.df
数据集不包括原始数据集中的所有变量。我想顺序是一样的,我可以把它和原来的合并。但是,有没有更直观的方法来做到这一点?理想情况下,我想使用 sf.
解决方案
您可以使用以下代码
library(sp)
df <- data.frame(longitude=c(4585434,4588904,4586694),
latitude=c(430060.8,430960.8,432427.2),
street=c("74 JOSEP SERRANO", "30 LLOBERA","4 SANT ILDEFONS"),
number=c(45,68,34))
#Convert the data frame to SpatialPointsDataFrame
coordinates (df)= ~longitude + latitude
#Assign a projection to it
proj4string(df) <- CRS("+proj=utm +zone=10")
#Projection transformation
longlats <- spTransform(df, CRS("+proj=longlat"))
#Convert it to data frame
longlats.df <- as.data.frame(longlats)
如果你想使用包来实现整个事情sf
,你可以使用下面的代码
df <- data.frame(longitude=c(4585434,4588904,4586694),
latitude=c(430060.8,430960.8,432427.2),
street=c("74 JOSEP SERRANO", "30 LLOBERA","4 SANT ILDEFONS"),
number=c(45,68,34))
#Conversion of data frame to sf object
df_sf <- st_as_sf(x = df,
coords = c("longitude", "latitude"),
crs = "+proj=utm +zone=10")
#Projection transformation
sfc = st_transform(df_sf, crs = "+proj=longlat +datum=WGS84")
#Convert it to data frame
sfc_df <- as.data.frame(sfc)
推荐阅读
- python - Web 使用 Python 抓取隐藏的表格
- multithreading - 如何使用 rx-java 跟踪文件?
- node.js - 如何发现我的 redis 频道当前没有发布者?
- python - 在 Postgres 中将多个值链接在一起
- reactjs - 在 asp.net core 中启用 CORS
- python - Python - 计算一个字典列表与另一个字典列表的出现次数
- ios - 快速将 [String: Any] 转换为 [String: String]
- python - 使用 Sklearn 进行多标签文本分类
- python - 如何在父类文档字符串中引用子类属性?
- ajax - 渲染数据表上的 ajax 数据卡在进度中并出现错误“TypeError:数据未定义”