我只是想知道是否有人有一个转换表来解决R中的栅格问题。我想知道这些数字是以米为单位的数字:
分辨率:0.08333333,0.08333333
决议:0.009398496,0.009988496
分辨率:0.002349,0.002349 = 250m(我认为)
我真的想知道设置栅格对象的分辨率,以使单元格大小为1平方公里。我正在使用跨越澳大利亚的光栅。
先谢谢大家。
干杯, 亚当
答案 0 :(得分:12)
这一切都取决于光栅的单位,这取决于投影。栅格甚至可能不是以米为单位的方格 - 它们可能是方形的度数,不是以米为单位的平方!
赤道1度经度是地球周长的1/360。在北极附近1度是一个小得多的距离,在极点上它几乎为零。然而,纬度是恒定的。
你可以拍摄光栅的角点,如果还没有将它们转换为lat-long坐标,然后计算它们之间的大圆距离(我记得这里有一个rdist函数)。但是如果你的光栅跨越整个地球,那么这将不起作用,因为那时你的NW角和你的NE角在同一点......嗯。无论如何,答案是...... 42。
如果你想制作澳大利亚1公里的栅格,那么....你需要一个澳大利亚的坐标系统,以公里为单位。在英国,我们有一个名为OSGB National Grid的系统,该系统足够接近公制网格。澳大利亚可能比较复杂,因为它比英国略大......所以澳大利亚似乎有一些网格系统。见这里:
http://www.spatialreference.org/ref/?search=AGD84
因此,您可能希望使用位于该国中部的系统来避免最严重的扭曲,然后在lat-long中计算出澳大利亚的边界,转换为epsg:20353并根据以下内容创建栅格:
在我看来澳大利亚大致是:
> 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值比边界值小1 - 这是将这些值放入的fencepost错误。
看看我的分辨率是多少?这是一个1公里的网格。问题是这可能会在沿海地区有点扭曲。您可以通过转换为lat-long(epsg:4326),然后转换到海岸上的点的正确AGD区域,看看它们有多么不同。它们可能非常接近,除了偏移。
无论如何,努夫说。
答案 1 :(得分:1)
查找为您的栅格赋予意义的元数据可能有点挑战。我花了很多时间寻找这个。如果光栅是由政府机构发布的,那么我希望这些信息能够突出显示在某个地方。
好消息是,一旦您知道各种栅格上使用的投影,就可以使用projectRaster()
包中的raster
将它们转换为公共投影。你需要在每种情况下找到描述原始和所需投影的proj.4字符串。您可以从http://www.spatialreference.org获得此信息。
当您知道投影时,您所寻求的分辨率信息将具有意义。