从UTM到纬度/经度的转换

3

我有一组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。

1个回答

7
您可以使用以下代码。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接