【问题标题】:Wrong value occur when converting points from UTM to WGS84 in R在 R 中将点从 UTM 转换为 WGS84 时出现错误值
【发布时间】:2018-12-23 19:57:36
【问题描述】:

我使用 this topic of Forum 中来自 Stanislav 的方法,这是一个关于“将纬度和经度点转换为 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)。

怎么了?对了,怎么控制输出的小数位数?

【问题讨论】:

    标签: r coordinates


    【解决方案1】:

    首先,你弄错了坐标的表达方式。应该是:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 2014-07-20
      • 2013-08-16
      • 1970-01-01
      • 2019-11-03
      • 2016-05-12
      • 2016-07-30
      • 2017-12-27
      • 1970-01-01
      相关资源
      最近更新 更多