在R中将点从UTM转换为WGS84时,出现错误的值

时间:2018-12-23 10:10:30

标签: r coordinates

我在this topic of Forum中使用了斯坦尼斯拉夫的方法,这是一个有关“将经纬度点转换为UTM”的问题。我反向编辑了该函数,以将点从UTM更改为WGS84,即:

library(sp); library(rgdal)

#Function
UTMToLongLat<-function(x,y,zone){
  xy <- data.frame(ID = 1:length(x), X = x, Y = y)
  coordinates(xy) <- c("X", "Y")
  proj4string(xy) <- CRS(paste("+proj=utm +zone=",zone," ellps=WGS84",sep=''))  
  res <- spTransform(xy, CRS("+proj=longlat +datum=WGS84"))
  return(as.data.frame(res))
}

尝试上面提到的上一个问题中的示例,即:

x2 <- c(-48636.65, 1109577); y2 <- c(213372.05, 5546301)

在WGS84中,预期是(118,10),(119,50)。 Colin的示例在UTM51中。

因此,使用以下句子:

done2 <- UTMToLongLat(x2,y2,51)

但是,它产生了(118.0729,1.92326),(131.4686,49.75866)。

怎么了?顺便问一下,如何控制输出的小数位数?

1 个答案:

答案 0 :(得分:0)

首先,您误解了坐标的表达式。应该是:

x <- c(-48636.65, 213372.05)
y <- c(1109577, 5546301)

在函数中,它将被转换并存储为:

> data.frame(ID = 1:length(x), X = x, Y = y)
#   ID         X       Y
# 1  1 -48636.65 1109577
# 2  2 213372.05 5546301

然后再次执行功能:

> UTMToLongLat(x, y, 51)
#   ID   X         Y
# 1  1 118  9.999997
# 2  2 119 50.000001

要控制小数位数:

> round(UTMToLongLat(x, y, 51))
#   ID   X  Y
# 1  1 118 10
# 2  2 119 50