当前位置: 首页 > 知识库问答 >
问题:

重新投影光栅数据时极值较小

卢树
2023-03-14

我正在尝试以0.0417度的分辨率将一个人工光发射的全球光栅从经度/纬度重新投影到贝尔曼等面积(EPSG:6933)。由于在重投影期间对像素进行插值时,城市地区周围的数据出现峰值,因此整个图层的数据丢失率约为15%。

我尝试将光栅转换为空间点数据框,重新投影空间点数据框,然后使用使用“projectraster”功能创建的光栅作为模板光栅进行光栅化(我认为模板光栅的尺寸、范围和分辨率可能是问题所在?)但是,这将生成一个具有穿过图层的水平线的光栅。

下面是一些以西班牙为例的示例代码。我可以通过电子邮件发送西班牙的tif文件(246kb):

library("sf")
library("raster")

behrmann <- CRS('+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +ellps=WGS84 +units=m +no_defs')

r <- raster("~/Documents/R spatial data[enter image description here][1]/Spain.tif")
cellStats(r, sum) # check summed light emissions
r_temp <- projectRaster(r, crs = behrmann) # creates template for rasterisation (data is lost due to interpolation of data spikes)
spdf <- rasterToPoints(r, spatial = TRUE)
spdf2 <- spTransform(spdf, CRS = behrmann)
r2 <- rasterize(spdf2, r_temp, field = "Spain", fun = "sum")
cellStats(r2, sum) # check no data has been lost
plot(log10(r2)) # see attached image[enter image description here][1]

如何能够在不丢失数据和避免水平线的情况下重新投影到相等的区域?我还尝试转换为空间多边形数据框而不是空间点,这不会生成直线,而是会丢失类似于“projectRaster”功能的数据。这一定是一个常见的问题,但我在网上找不到任何帮助。

非常感谢。

reprojectingstack.imgur.com/IV0fZ.png后的水平线示例

共有1个答案

公冶阳德
2023-03-14

变换光栅时,将计算新的单元值。这通常是通过平均值来实现的,这会减少极值。

library(raster)
r <- raster(res=5)
set.seed(1)
values(r) <- runif(ncell(r))
r <- focal(r, w=matrix(1, 3, 3))
r <- focal(r, w=matrix(1, 3, 3))
r <- round(focal(r, w=matrix(1, 3, 3)))
r
#class      : RasterLayer 
#dimensions : 36, 72, 2592  (nrow, ncol, ncell)
#resolution : 5, 5  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +no_defs 
#source     : memory
#names      : layer 
#values     : 229, 473  (min, max)


behrmann <- "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +ellps=WGS84 +units=m"
x <- projectRaster(r, crs=behrmann)
x
#class      : RasterLayer 
#dimensions : 27, 78, 2106  (nrow, ncol, ncell)
#resolution : 482000, 638000  (x, y)
#extent     : -18813530, 18782470, -8607770, 8618230  (xmin, xmax, ymin, ymax)
#crs        : +proj=cea +lat_ts=30 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
#source     : memory
#names      : layer 
#values     : 233.0725, 471.7214  (min, max)

但是,可以改用最近邻方法(这类似于通过转换点数据尝试的方法)。

z <- projectRaster(r, crs=behrmann, method="ngb")
z
#class      : RasterLayer 
# ...
#values     : 229, 473  (min, max)

或者确实使用多边形(如果没有太多的单元)

p <- as(r, "SpatialPolygonsDataFrame")
y <- spTransform(p, behrmann)

y
#class       : SpatialPolygonsDataFrame 
#features    : 2160 
#extent      : -17367530, 17367530, -7089914, 7089914  (xmin, xmax, ymin, ymax)
#crs         : +proj=cea +lat_ts=30 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
#variables   : 1
#names       : layer 
#min values  :   229 
#max values  :   473 
 类似资料:
  • 我必须将一些投影光栅(具有ndvi值)转换为csv或excel文件。我想保持网格形式,第一行作为公制lon值,第一列作为公制lat值。在交叉点应该有ndvi值。 我通常用“as”。数据frame(光栅,xy=T)将值导出为数据帧,但在这种情况下,我将获得一种值矩阵。 我想要的 安然后,write.csv....

  • 嗨,光栅战士! 经过数月的数据处理,我对结果感到头痛。我对R和空间分析很陌生,但在我的学习过程中很开心。 这里是我的问题:一旦我将zonal函数应用于一组5个光栅对象(.tif),不知何故,我会在我假设为零的区域中得到重复的值。此外,某些值会显示在其他单元格中。 这里我的代码: 以下是我的结果: 从31到36与从1到6的值相同。 这里是我的一位同事的结果,我正在与他进行比较 正如您所看到的,我得到

  • 创建投影 1选择一个对象或组(或在 “图层 ”面板中定位一个图层)。 2选择 “效果 ”>“风格化 ”>“投影 ”。 3设置投影的选项,并单击 “确定 ”。 模式指定投影的混合模式。 不透明度指定所需的投影不透明度百分比。 X 位移和 Y 位移指定希望投影偏离对象的距离。 模糊指定要进行模糊处理之处距离阴影边缘的距离。 Illustrator 会创建一个透明栅格对象来模拟模糊效果。 颜色指定阴影的

  • 我已经使用Google Maps API V3创建了一个自定义地图。这是一幅虚构世界的矩形地图,而不是真实世界中的任何东西。 我一直在读关于如何在自定义谷歌地图中使用投影的文章。我需要使用投影,因为使用投影放置标记和区域,它们不会水平重复。总之,我从教程中提取了以下代码: 我已经把它应用到我的地图上,它似乎起作用了。然而,我正在试图弄清楚如何改变投影的比例。当我放置这样的标记时: 标记被放置在地图

  • 我把我的问题简化了一点,希望它有意义。 我有三个栅格,我正在使用。 栅格是一个栅格,其土地覆盖属性值1为本地土地覆盖,0为非本地土地覆盖。 本地蒸散量和非本地蒸散量分别是本地物种和非本地物种的蒸散量。两个光栅的属性都在[015000]之间 id要做的是将1的所有值替换为nativeet值,将0的所有值替换为nonnativeet值。 我的想法是将土地覆盖光栅(值为1或0)转换为AET光栅(值介于0

  • 我理解为什么墨卡托投影的纬度是有限制的,但是根据我假设的理论,经度是[-180,180]呢。 然而,从几个地图应用程序的源代码中我看到了。他们试图将经度限制在[-177177]之间。 这是什么原因?