在R中将UTM转换为Lat / Long

时间:2016-04-09 18:25:41

标签: r latitude-longitude utm rgooglemaps

我有一个9,000+ UTM坐标的.csv文件,我想将其转换为十进制度数,我遇到了一些麻烦。我已经搜索了这里和其他地方发布的几篇帖子,我似乎无法找到将我的UTM集转换为可用且准确的纬度/长度的解决方案。

我基本上有两个问题:1)有没有人看到我的代码有任何问题; 2)是否有人熟悉将UTM转换为lat / long并且仅在Rgooglemaps包中使用UTM?

以下是我的代码和数据的一些示例:

数据:

>head(utm)
-Northing Easting
1  4236576  615805
2  4236576  615805
3  4236576  615805
4  4236576  615805
5  4236576  615805
6  4236576  615805
到目前为止

代码:

utm <- read.csv(file="utm.csv", header=TRUE, sep=",")
library(rgdal)
utm <- utm[complete.cases(utm),]
utm1 <- data.frame(x=utm$Northing,y=utm$Easting) 
coordinates(utm1) <- ~x+y 
class(utm1)
proj4string(utm1) <- CRS("+proj=utm +zone=10 +datum=WGS84 +units=m +ellps=WGS84") 
utm2 <- spTransform(utm1,CRS("+proj=longlat +datum=WGS84"))

结果

> head(utm2)
SpatialPoints:
             x        y
[1,] -91.08516 4.727323
[2,] -91.08516 4.727323
[3,] -91.08516 4.727323
[4,] -91.08516 4.727323
[5,] -91.08516 4.727323
[6,] -91.08516 4.727323
Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0 

所以,我得到一些输出,但我没有得到合理的输出。这里有什么我想念的吗?另外,为了它的价值,我计划使用“Rgooglemaps”软件包创建一些热图和内核密度图。

2 个答案:

答案 0 :(得分:4)

我使用以下代码将UTM转换为Lat / Long。它在伦敦地区工作

wgs84 = "+init=epsg:4326"
bng = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 
+ellps=airy +datum=OSGB36 +units=m +no_defs'

ConvertCoordinates <- function(easting,northing) {
out = cbind(easting,northing)
mask = !is.na(easting)
sp <-  sp::spTransform(sp::SpatialPoints(list(easting[mask],northing[mask]),proj4string=sp::CRS(bng)),sp::CRS(wgs84))
out[mask,]=sp@coords
out
}

答案 1 :(得分:0)

我认为您只需要交换X和Y(北移为Y,东移为X)。原始代码对我来说很有效。