将UTM转换为经/纬度,反之亦然

时间:2018-09-26 02:01:17

标签: r geospatial gdal rgdal

我以tif文件的形式下载了新西兰的海拔数据,并附带了“世界文件”(tfw

80.000000000000000
0.000000000000000
0.000000000000000
-80.000000000000000
1062571.750000000000000
6282711.000000000000000

我从维基百科上了解到,第一个和第三个数字表示比例(像素/公里),而后两个数字在UTM坐标中定位原点(如果我理解正确的话)。

现在,我想将这些栅格数据与一个不同的数据集对齐,该数据集包括一个从GPS坐标追踪的路径,这为我提供了经纬度格式

       X         Y
1 174.7771 -41.29805
2 174.7771 -41.29815
3 174.7772 -41.29819
4 174.7772 -41.29824
5 174.7772 -41.29827
6 174.7772 -41.29836
...

我尝试了以下将UTM转换为经/纬度的方法,但是结果似乎完全错误。我想念什么?

library(rgdal)
utm <- SpatialPoints(cbind(1062571.75, -6282711.0), 
                       proj4string=CRS("+proj=utm"))
spTransform(utm, CRS("+proj=nzmg"))

class       : SpatialPoints 
features    : 1 
extent      : 1754874408, 1754874408, 5271325323, 5271325323  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=nzmg +ellps=WGS84 

编辑:按照下面的建议,我从tif文件中获取了以下数据,

> library(raster)
> r <- raster("nztm.tif")
> r
class       : RasterLayer 
dimensions  : 19712, 13261, 261400832  (nrow, ncol, ncell)
resolution  : 80, 80  (x, y)
extent      : 1062532, 2123412, 4705791, 6282751  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
data source : nztm.tif 
names       : nztm 
values      : -32768, 32767  (min, max)

> crs(r)
CRS arguments:
 +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000
+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

1 个答案:

答案 0 :(得分:1)

首先检查文件是否带有坐标参考系统(也许在.prj文件中?) 在R中,您可以执行以下操作:

library(raster)
r <- raster("elevation.tif")
r
crs(r)

如果这是不适用的,而您在其他地方找不到任何参考,则可能很难弄清楚。

海拔crs可能是“ UTM”,但根本不能保证。如果是UTM,则需要知道60个UTM区域中的哪个区域,然后可能会有一些其他参数。实际上,由于新西兰跨越多个UTM区域,因此极不可能有人选择新西兰的UTM。您可以尝试以下方法:

library(rgdal)
utm <- SpatialPoints(cbind(1062571.75, -6282711.0), 
                       proj4string=CRS("+proj=utm +zone=59 +datume=WGS84 "))
spTransform(utm, CRS("+proj=longlat +datum=WGS84"))
#SpatialPoints:
#     coords.x1 coords.x2
#[1,] -179.8818 -56.35255

不是那个离新西兰很远。

“ nzmg”或其他适用于新西兰的标准crs似乎更合理

utm <- SpatialPoints(cbind(1062571.75, -6282711.0), 
                       proj4string=CRS("+proj=nzmg +datum=WGS84"))
spTransform(utm, CRS("+proj=longlat +datum=WGS84"))

# -178.9791  -71.8877

更可惜的是,几乎是南极洲