给定一个zoo
包含“lat”、“lon”和“value”列的时间序列:
z <- zoo(...)
# anyone knows how to create a simple example series here?
我需要将纬度和经度转换为 UTM 以执行进一步的操作,如距离计算。经过一番研究,我想出了一个可以将所有内容转换为 data.frame 的工作片段:
d <- as.data.frame(z)
coordinates(d) <- ~ lon+lat
proj4string(d) <- CRS("+proj=longlat +datum=WGS84")
d.final <- spTransform(d, CRS(paste("+proj=utm +zone=",zone," ellps=WGS84",sep="")))
这将删除初始的 lat 和 lon 列,并添加两个新的类似 UTM 的 lat 和 lon 列。有没有什么简单的方法可以直接用对象做到这一点zoo
?
此外,这个片段显然缺少来自变量的信息zone
。从经度/纬度确定 UTM 区域(转换)我们学习如何从经度中获取区域编号:
zone.number <- (floor((z$lon + 180)/6) %% 60) + 1
但是我现在仍然不知道如何计算区域字母,例如。“N”。如何获得它?一般来说,我可以预期我所有时间序列的区域都是恒定的。
这个从答案修改的解决方案是使用的:
# coming from a zoo time series z with columns z$lat and z$lon
library(rgdal)
# assume that z stays within a zone
zone <- (floor((z$lon[1] + 180)/6) %% 60) + 1
# convert
utm <- project(merge(z$lon, z$lat), paste0("+proj=utm +zone=", zone))
# assign UTM values to new columns in z
z$utmx <- utm[,1]
z$utmy <- utm[,2]