标签: raster

如何使用不同范围的栅格创建栅格砖?

我是R的新手,所以这个问题非常基础,但我一直在努力,无法找到有效的解决方案.我想从同一区域的一些地图中创建一个栅格砖.它们以HDF-EOS格式下载,我使用Modis重投影工具将它们转换为.tif.

生成的栅格具有相同的投影,但其范围,分辨率和原点不同.

我尝试了几种方法,总结如下:

  1. 手动定义子集范围并对所有栅格进行子集化.然后尝试用子集栅格制作砖块

  2. 重新采样栅格,为它们提供相同数量的列和行.理想情况下,这将确保栅格单元对齐并可放入栅格砖中.此选项创建了一个块,其中栅格没有值,它们是空的.

我想知道我应该遵循什么概念来纠正程度.创建一个空栅格是否正确(有效),我将在后面用导入的栅格图像的值填充它?你能看出我弄错了吗?如果它是相关的,我正在使用Mac OSX版本10.9.1,并使用rgdal版本0.8-14

任何帮助将非常感谢!

谢谢

我在这里添加我一直使用的代码:

# .tif files have been creating using the Modis Reprojection Tool. Input
# files used for this Tool was LANDSAT HDF-EOS imagery.

library(raster)
library(rgdal)

setwd()=getwd()

# Download the files from dropbox:
dl_from_dropbox <- function(x, key) {
  require(RCurl)
  bin <- getBinaryURL(paste0("https://dl.dropboxusercontent.com/s/", key, "/", x),
                      ssl.verifypeer = FALSE)
  con <- file(x, open = "wb")
  writeBin(bin, con)
  close(con)
  message(noquote(paste(x, "read into", getwd()))) …
Run Code Online (Sandbox Code Playgroud)

stack r crop raster resampling

9
推荐指数
1
解决办法
1万
查看次数

有效地找到2D网格中最大的周围方形

在具有2D网格地图的游戏中,我面临以下情况:

在此输入图像描述

我需要找到围绕玩家位置(红点)的最大边界方块.或者至少最大尺寸边界,因为可能会有更多.注意:方形,而不是矩形.

在这种情况下,很容易看到最大的正方形是8x8:

在此输入图像描述

如果我在地图中添加障碍物,最大的可能性现在是5x5:

在此输入图像描述

我正在寻找一种快速有效的方法来找到包含玩家位置的(或者)最大正方形.

我目前正在做的是一种蛮力:

  • 始终可以使用1x1的方格(玩家位置本身).
  • 然后我尝试所有可能的2*2方格包含播放器,这是4个可能的不同方块,并为每个我做2*2循环,检查所有网格单元是否清晰(不是墙壁或障碍物).
  • 如果可能是2*2的方格,那么我会尝试围绕玩家的所有可能的3*3方格(这是9个不同的方格),并为每个我做3*3循环,以检查是否没有碰撞.
  • 等等,直到尺寸为N*N,没有正方形是可能的.

它的工作原理很简单,但感觉非常低效.显然我在这里做了很多冗余检查,我想知道是否有更聪明/更快的方法来做到这一点.有谁知道有效地做到这一点的算法?

(编辑)重要补充:除了玩家四处移动外,还会动态添加或移动障碍物或墙壁,因此这里的缓存或预先优化很难实现.

algorithm optimization raster bounding-box

9
推荐指数
1
解决办法
1494
查看次数

在Paper.js中适合页面缩放后,光栅图像偏离中心

我正在研究一个将raster(图像)放入的Paper.js应用程序view.然后它缩放以适合图像,以便一次可见所有图像.它主要是工作,但图像最终偏移,如下所示:

抵消

它看起来应该更像这样:

在此输入图像描述

这是制作view图像,添加图像并调用缩放以适合的代码:

// Set up HTMLImage
var image = new Image(this.props.image.width, this.props.image.height);
image.src = 'data:image/png;base64,' + this.props.image.imageData;

//var canvas = React.findDOMNode(this.refs.canvas); // React 0.13 +
var canvas = this.refs.canvas.getDOMNode();

// Scale width based on scaled height; canvas height has been set to the height of the document (this.props.height)
var scalingFactor = canvas.height/image.height;
canvas.width = image.width * scalingFactor;

// Initialize Paper.js on the canvas
paper.setup(canvas);

// Add image to Paper.js canvas
var raster = …
Run Code Online (Sandbox Code Playgroud)

javascript image raster zooming paperjs

9
推荐指数
1
解决办法
1488
查看次数

识别R栅格包中的重叠区域

包:

数据:

  • 一个有10个波段的rasterStack.
  • 每个带包含由NA围绕的图像区域
  • 频带是合乎逻辑的,即图像数据为"1",周围区域为"0"/ NA
  • 每个带的"图像区域"彼此不完全对齐,但大多数具有部分重叠

目的:

  • 编写一个快速函数,可以返回每个"区域"的rasterLayer或单元格编号,例如,仅包含来自第1和第2波段的数据的像素落在区域1中,包含仅来自第3和第4波段的数据的像素落在第2区域中如果返回了rasterLayer,我需要能够稍后将区域值与带编号进行匹配.

第一次尝试:

# Possible band combinations
values = integer(0)
for(i in 1:nlayers(myraster)){
 combs = combn(1:nlayers(myraster), i)
 for(j in 1:ncol(combs)){
  values = c(values, list(combs[,j]))
 }
}

# Define the zone finding function
find_zones = function(bands){

 # The intersection of the bands of interest
 a = subset(myraster, 1)
 values(a) = TRUE
 for(i in bands){
  a = a & myraster[[i]]
 }

 # Union of the remaining bands
 b = subset(myraster, 1)
 values(b) = FALSE …
Run Code Online (Sandbox Code Playgroud)

r raster image-processing

8
推荐指数
1
解决办法
2229
查看次数

与spplot相比,如何使用ggplot改进空间栅格地图?

与spplot()图例相比,如何使用ggplot改进空间栅格地图的图例?

我想使用ggplot()而不是ssplot()绘制空间地图,但是与spplot相比,我想提高一些方面:

  1. 创建一个ggplot图例,从小(底部)到大值(顶部)
  2. 在ggplot图例中有与ssplot()图例类似的中断,以便我知道每种颜色的边界.

## load packages
require(raster)
require(ggplot2)
require(rgdal)
require(RColorBrewer)
set.seed(1)

r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40,
          crs="+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100
+ellps=WGS84")
r <- setValues(r,matrix(rnorm(1600, mean=0.4,sd=0.2))) 

## 1. spatial map with spplot
cuts <-seq(minValue(r),maxValue(r),length.out=8)
cuts = round(cuts,digits=2)
col.regions = brewer.pal(length(cuts)+3-1, "RdYlGn")
print( 
spplot(as(r, 'SpatialGridDataFrame'),at=cuts,
col.regions=col.regions,
colorkey=list(labels=list(at=cuts),at=cuts), pretty=TRUE,
scales=list(draw=T)
) 
)

## 2. spatial map with ggplot
p = rasterToPoints(r); df = data.frame(p)
colnames(df) = c("x", "y", "NDVI")

p  <- ggplot(data=df) + geom_tile(aes(x, y, fill=NDVI)) +
coord_equal() + …
Run Code Online (Sandbox Code Playgroud)

r raster spatial map ggplot2

8
推荐指数
1
解决办法
5247
查看次数

在R中将Shapefile转换为光栅?

我有一个从worldwildlife.org下载的shapefile,用于世界地球生态区.该文件可以在这里加载:http://worldwildlife.org/publications/terrestrial-ecoregions-of-the-world.

它是一个标准的形状文件,我想用它做两件事.首先:从我的本地目录中获取shapefile并将其剪辑到北美东部(ext = extent(-95,-50,24,63))

# Read shapefile using package "maptools"
eco_shp <- readShapeLines("F:/01_2013/Ecoregions/Global/wwf_terr_ecos.shp", 
                          proj4string=CRS("+proj=utm +zone=33 +datum=WGS84")) 


# Set the desired extent for the final raster using package "raster" 
ext <- extent(-95, -50, 24, 63)
Run Code Online (Sandbox Code Playgroud)

我确信我必须在"raster"包中使用rasterize功能,但我仍然无法使其正常工作.我很感激有关如何做到这一点的任何建议.

r raster data-conversion shapefile rasterizing

8
推荐指数
1
解决办法
9672
查看次数

绘制一个颜色渐变的光栅在零附近发散

我正在尝试绘制具有正值和负值的地图.

所有正值都应该是红色,而负值应该是蓝色,零应该是白色,就像这个带有离散颜色的样本图一样在此输入图像描述

以下是我正在使用的代码:

library (rasterVis)
ras1 <- raster(nrow=10,ncol=10) 
set.seed(1) 
ras1[] <- rchisq(df=10,n=10*10) 
ras2=ras1*(-1)/2 
s <- stack(ras1,ras2) 
levelplot(s,par.settings=RdBuTheme())
Run Code Online (Sandbox Code Playgroud)

非常感谢您提供可以应用于其他绘图练习的通用解决方案.

maps r raster colorbar

8
推荐指数
2
解决办法
8949
查看次数

R(windows)中大栅格的并行处理

我正在使用doSNOW包,更具体地说是parLapply函数,用于在大栅格数据集列表(OS:Windows x64)上执行重新分类(以及随后的其他操作).

代码看起来有点像这个简约的例子:

library(raster)
library(doSNOW)

#create list containing test rasters

x <- raster(ncol=10980,nrow=10980) 
x <- setValues(x,1:ncell(x)) 

list.x <- replicate( 9 , x )

#setting up cluster

NumberOfCluster <- 8
cl <- makeCluster(NumberOfCluster)
registerDoSNOW(cl)
junk <- clusterEvalQ(cl,library(raster))

#perform calculations on each raster

list.x <- parLapply(cl,list.x,function(x) calc(x,function(x) { x * 10 }))

#stop cluster

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

代码实际上按预期工作.当我想继续结果时会出现问题.我收到此错误消息:

> plot(list.x[[1]])
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
In file(fn, "rb") :
  cannot open file 'C:\Users\*****\AppData\Local\Temp\RtmpyKYdpY\raster\r_tmp_2016-02-29_133158_752_67867.gri': No such file …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r raster mclapply snow

8
推荐指数
1
解决办法
1912
查看次数

栅格和ggplot地图在R中排列不完整

我正在尝试使用绘制空间栅格ggplot2.

require(raster)
require(ggplot2)
Run Code Online (Sandbox Code Playgroud)

下载数据,使用raster包加载为栅格.有关此数据产品的更多详细信息,请访问此处.然后将光栅转换为点,以便它可以很好地运行ggplot.

system('wget https://www.dropbox.com/s/7jsdqgc9wjcdznv/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt') 
layer<- raster("path/to/raster/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") #you need to specify your own path here, wherever the downloaded file is saved. 
raster.points <- rasterToPoints(layer)
raster.points <- data.frame(raster.points)
colnames(raster.points) <-c('x','y','layer')
Run Code Online (Sandbox Code Playgroud)

现在ggplot2用来制作地图,然后躺在栅格上.

mp <- NULL
#grab US map and choose colors
map.US <- borders("usa", colour='white',fill='black', lwd=0.4)
mp <- ggplot(data=raster.points, aes(y=y, x=x)) 
mp <- mp + map.US
mp <- mp + geom_raster(aes(fill=layer)) 
mp <- mp + theme(axis.text.y=element_blank(),
                axis.text.x=element_blank(),
                axis.title.y=element_blank(),
                axis.title.x=element_blank(),
                axis.ticks=element_blank(), 
                panel.background …
Run Code Online (Sandbox Code Playgroud)

gis r raster ggplot2

8
推荐指数
1
解决办法
891
查看次数

带有随机森林的图像分类(光栅堆栈)(包裹护林员)

我正在使用R包护林员对随机森林进行拟合以对光栅图像进行分类.预测函数产生错误,此后我提供了一个可重现的例子.

library(raster)
library(nnet)
library(ranger)
data(iris)

# put iris data into raster
r<-list()
for(i in 1:4){
  r[[i]]<-raster(nrows=10, ncols=15)
  r[[i]][]<-iris[,i]
}
r<-stack(r)
names(r)<-names(iris)[1:4]

# multinom (an example that works)
nn.model <- multinom(Species ~ ., data=iris, trace=F)
nn.pred<-predict(r,nn.model)

# ranger (doesn't work)
ranger.model<-ranger(Species ~ ., data=iris)   
ranger.pred<-predict(r,ranger.model)
Run Code Online (Sandbox Code Playgroud)

给出的错误是

v [cells,]中的错误< - predv:矩阵上的下标数量不正确

虽然我的真实数据的错误是

p [-naind,]中的错误< - predv:要替换的项目数不是替换长度的倍数

我唯一想到的是,ranger.prediction对象包含了除感兴趣的预测之外的几个元素.无论如何,如何使用游侠在光栅堆栈上进行预测?

r raster

8
推荐指数
1
解决办法
1218
查看次数