【发布时间】:2014-11-10 21:29:08
【问题描述】:
给定一个包含“lat”、“lon”和“value”列的zoo时间序列:
z <- zoo(...)
# anyone knows how to create a simple example series here?
我需要将纬度和经度转换为 UTM,以便执行进一步的操作,例如距离计算。经过一番研究,我想出了一个可以将所有内容转换为 data.frame 的工作 sn-p:
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 对象执行此操作?
此外,这个 sn-p 显然缺少来自变量 zone 的信息。从Determining UTM zone (to convert) from longitude/latitude我们学习如何从经度中获取区域编号:
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]
【问题讨论】:
标签: r coordinates zoo utm proj