我在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)。
怎么了?顺便问一下,如何控制输出的小数位数?
答案 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