3

我只是想知道是否有人有R中栅格分辨率的转换表。我想知道这些数字以米为单位:

分辨率:0.08333333, 0.08333333

分辨率:0.009398496、0.009398496
分辨率:0.002349、0.002349 = 250m(我认为)

我真的很想知道设置栅格对象以使像元大小为 1km^2 的分辨率。我正在使用跨越澳大利亚的栅格。

提前谢谢大家。

干杯,亚当

4

2 回答 2

13

这完全取决于栅格的单位,这取决于投影。栅格甚至可能不是以米为单位的方形网格——它们可能是以度为单位的正方形,而不是以米为单位的正方形!

赤道1度经度是地球周长的1/360。在北极附近 1 度的距离要小得多,在极点几乎为零。然而,纬度是恒定的。

您可以获取栅格的角点,如果尚未将它们转换为经纬度坐标,然后计算出它们之间的大圆距离(我记得在某处有一个 rdist 函数)。但是,如果您的栅格跨越整个地球,这将不起作用,因为那时您的 NW 角和您的 NE 角在同一点......嗯。无论如何,答案是…… 42。

如果你想制作 1 公里的澳大利亚栅格,那么......你需要一个以公里为单位的澳大利亚坐标系。在英国,我们有一个称为 OSGB 国家网格的系统,它与公制网格足够接近。澳大利亚可能会更棘手,因为它比英国略大……所以澳大利亚似乎有一些网格系统。看这里:

http://www.spatialreference.org/ref/?search=AGD84

因此,您可能希望使用该国中部的系统来避免最严重的失真,然后计算出澳大利亚的经纬度范围,转换为 epsg:20353 并基于此创建一个栅格:

在 lat-long 我估计澳大利亚大致是:

> xtll
         [,1]       [,2]
[1,] 112.5162 -43.906900
[2,] 155.8425  -7.585619

把它变成一个 SpatialPoints 对象:

> xtll=SpatialPoints(xtll,CRS("+init=epsg:4326"))

转换为该国中部的 AGD84:

> spTransform(xtll,CRS("+init=epsg:20353"))
SpatialPoints:
     coords.x1 coords.x2
[1,]  -1306200   4886041
[2,]   2849956   9103124

将栅格范围对象四舍五入为 km:

> ext = extent(-1306000,2850000,4886000,9103000)

我们需要多少行和多少列?

> length(-1306:2850)
[1] 4157
> length(4886:9103)
[1] 4218

创建栅格:

> r = raster(ext,ncol=4156,nrow=4217,crs="+init=epsg:20353")
> r
class       : RasterLayer 
dimensions  : 4217, 4156, 17525852  (nrow, ncol, ncell)
resolution  : 1000, 1000  (x, y)
extent      : -1306000, 2850000, 4886000, 9103000  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:20353 +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs 
values      : none

请注意,ncol 和 nrow 值比边界值小一 - 这将是一个栅栏错误,将这些值放入其中。

看看我的分辨率是1000吗?这是一个1公里的网格。问题是这在海岸上可能会有点扭曲。您可以通过转换为经纬度 (epsg:4326) 来计算失真程度,然后转换为海岸上点的正确 AGD 区域,并查看它们的不同之处。它们可能非常接近,除了偏移量。

无论如何,纳夫说。

于 2012-03-03T00:03:08.887 回答
1

找到赋予栅格意义的元数据可能有点挑战。我花了很多时间寻找这个。如果栅格是由政府机构发布的,那么我希望将这些信息张贴在显眼的地方。

好消息是,一旦您知道各种栅格上使用的投影,您就可以将它们转换为包中使用的通用projectRaster()投影raster。在每种情况下,您需要找到描述原始投影和所需投影的 proj.4 字符串。您可以从以下网址获取:http ://www.spatialreference.org 。

当您知道您的投影时,您寻求的分辨率信息将有意义。

于 2012-03-03T04:59:30.227 回答