我发现当我尝试使用绘图(...,add = T)覆盖多个栅格时,如果我尝试将多于3个栅格叠加在一起,则后续绘图不会正确对齐栅格.
我最初的意图是创建一个模拟的土地覆盖的分类地图,其中代表封面类的颜色的黑暗与我们的模型投影中的确定性不同.为此,我创建了一个简单的脚本,它将遍历每个封面类并使用从灰色(低确定性森林预测)到全覆盖颜色(例如,深绿色)的颜色渐变来绘制它(例如,森林,地图上的绿色)对于强烈预测的区域).我发现使用这种方法,在第3个封面添加到绘图之后,所有后续覆盖在绘图上的栅格都是任意错位的.我已经颠倒了封面类的绘图顺序,并且表现出相同的行为,这意味着它不是个别封面类栅格的问题.在Rstudio中更令人费解的是,当我使用变焦按钮仔细检查最终情节时,错位会恶化.
你对这种行为存在的原因有什么看法吗?最重要的是,您有任何建议的解决方案或解决方法吗?
下面链接中的代码和数据具有捕获的所有描述的行为. https://dl.dropboxusercontent.com/u/332961/r%20plot%20raster%20add%20issue.zip 转动plot_gradient = F看看你如何只是简单地将同一个栅格子集化并按顺序将子集添加到同一个图中可以复制这个问题.我已经尝试设置绘图设备图的范围(...,ext),但这不起作用.我也检查了每个封面光栅的范围是一样的.
下面是未对齐的封面类的图.绘制到jpeg设备将导致类似的图像(即,这不是Rstudio渲染的问题).
奇怪的是,如果我使用Rstudio放大图像,则不对齐是不同的
相比之下,这就是封面应该如何在景观中正确对齐

library(raster)
library(colorRamps)
raster_of_classes=raster("C:/r plot raster add issue/raster_of_classes.tif")
raster_of_certainty_of_classes=raster("C:/r plot raster add issue/raster_of_certainty_of_classes.tif")
endCols=c("darkorchid4", "darkorange3", "red3", "green4", "dodgerblue4") #colors to be used in gradients for each class
classes=unique(raster_of_classes)
minVal=cellStats(raster_of_certainty_of_classes, min)
tmp_i=1
addPlot=F
plot_gradient=F #this is for debug only
#classes=rev(classes) #turn this off and on to see how last 2 classes are mis aligned, regardless of plotting order
for (class in classes){
raster_class=raster_of_classes==class #create mask for individual class
raster_class[raster_class==0]=NA …Run Code Online (Sandbox Code Playgroud) 我在R中使用了几个高分辨率栅格图层.对于我正在运行的一些分析,细节水平过高,因此我希望通过降低分辨率来加快速度.
坐标系是UTM,因此单位是米.决议说它是30,30(x,y).所以这里的分辨率似乎是30米.
有人可以告诉我如何将分辨率改为120米吗?我已经阅读了resample()和projectRaster()函数的帮助,但它们似乎需要一个具有所需分辨率的模板栅格,这是我没有的.
以下是我的一个栅格图层的示例:
alt.utm
类:RasterLayer
尺寸:4572,2495,11407140(nrow,ncol,ncell)
分辨率:30,30(x,y)
范围:421661,496511,4402939,4540099(xmin,xmax,ymin,ymax)
coord.REF.:+ proj = utm + zone = 13 + ellps = GRS80 + towgs84 = 0,0,0,0,0,0,0 + units = m + no_defs
数据源:在内存
名称中:图层
值:1485.127,4275.202(分钟,最大)
我需要创建几个光栅马赛克.我在64位Windows计算机上使用Package光栅版2.0-31.我相信我的作业通过所有可能的博客检查,并向一些同事提出这个问题,但仍然无法找到解决方案.
我遇到的问题是,如果我的网格列在栅格对象中,我就无法创建马赛克.我发现这个例子,虽然我可以申请,但不是,我得到一个奇怪的错误信息.以下示例代表我的问题:
r <- raster()
r1 <- crop(r, extent(-10, 10, -10, 10))
r2 <- crop(r, extent(0, 20, 0, 20))
r3 <- crop(r, extent(10, 30, 10, 30))
r1[] <- 1:ncell(r1)
r2[] <- 1:ncell(r2)
r3[] <- 1:ncell(r3)
rasters1 <- list(r1, r2, r3)
mos <- mosaic(rasters1,fun=mean)
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function ‘mosaic’ for signature ‘"list", "missing"’
Run Code Online (Sandbox Code Playgroud)
我也试过这里建议的功能,但也没有用.
fmerge <- function(rasters1, fun, ...){
ex <- raster(union(rasters1))
res(ex) <- res(rasters1[[1]]) …Run Code Online (Sandbox Code Playgroud) 在另一个线程的帮助下,我设法绘制了一些全局地图.首先,我将气象GRIB2数据转换为Netcdf,然后绘制全局地图.
现在我想绘制地图的一个子区域.我尝试了crop命令并成功提取了全局nc文件的子区域.但是在绘图时我找不到如何控制轴限制.它绘制的地图比数据区域大,因此两侧都会出现大的空白区域.
这是我用来绘制地图的脚本
library("ncdf")
library("raster")
library("maptools")
DIA=format(Sys.time(), "%Y%m%d00") # Data d'avui
url=sprintf("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.%s/gfs.t00z.pgrb2f00", DIA) # Ruta del ftp
loc=file.path(sprintf("%s",url))
download.file(loc,"gfs.grb",mode="wb")
system("/usr/bin/grib2/wgrib2/wgrib2 -s gfs.grb | grep :TMP: | /usr/bin/grib2/wgrib2/wgrib2 -i gfs.grb -netcdf temp.nc",intern=T)
t2m <- raster("temp.nc", varname = "TMP_2maboveground")
rt2m <- rotate(t2m)
t2mc=rt2m-273.15
DAY=format(Sys.time(), "%Y%m%d") # Data d'avui
e=extent(-40,40,20,90)
tt=crop(t2mc,e)
png(filename="gfs.png",width=700,height=600,bg="white")
rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors
plot(tt,col=rgb.palette(200),main=as.expression(paste("Temperatura a 2m ",DAY," + 00 UTC",sep="")),axes=T)
dev.off()
Run Code Online (Sandbox Code Playgroud)
给出这个输出.

它必须是一个简单的,但我是一个简单的R用户.提前致谢.
编辑:按照建议添加xlim = c(-40,40),ylim = c(20,90)时的新输出.它似乎无法解决问题.但是使用x,y大小的输出png文件看起来很有希望,因为我可以调整大小以适应地图.确定它必须是另一种解决方案,正确的我无法找到.

我是R的新手,所以这个问题非常基础,但我一直在努力,无法找到有效的解决方案.我想从同一区域的一些地图中创建一个栅格砖.它们以HDF-EOS格式下载,我使用Modis重投影工具将它们转换为.tif.
生成的栅格具有相同的投影,但其范围,分辨率和原点不同.
我尝试了几种方法,总结如下:
手动定义子集范围并对所有栅格进行子集化.然后尝试用子集栅格制作砖块
重新采样栅格,为它们提供相同数量的列和行.理想情况下,这将确保栅格单元对齐并可放入栅格砖中.此选项创建了一个块,其中栅格没有值,它们是空的.
我想知道我应该遵循什么概念来纠正程度.创建一个空栅格是否正确(有效),我将在后面用导入的栅格图像的值填充它?你能看出我弄错了吗?如果它是相关的,我正在使用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) 在具有2D网格地图的游戏中,我面临以下情况:

我需要找到围绕玩家位置(红点)的最大边界方块.或者至少是最大尺寸的边界,因为可能会有更多.注意:方形,而不是矩形.
在这种情况下,很容易看到最大的正方形是8x8:

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

我正在寻找一种快速有效的方法来找到包含玩家位置的(或者)最大正方形.
我目前正在做的是一种蛮力:
它的工作原理很简单,但感觉非常低效.显然我在这里做了很多冗余检查,我想知道是否有更聪明/更快的方法来做到这一点.有谁知道有效地做到这一点的算法?
(编辑)重要补充:除了玩家四处移动外,还会动态添加或移动障碍物或墙壁,因此这里的缓存或预先优化很难实现.
我通过谷歌找到的二次/三次贝塞尔曲线代码主要通过将线细分为一系列点并用直线连接它们来实现.光栅化发生在行算法中,而不是在bézier算法中.像Bresenham这样的算法逐像素地工作以栅格化一条线,并且可以进行优化(参见Po-Han Lin的解决方案).
什么是二次贝塞尔曲线算法,像线像算法一样逐像素地工作,而不是绘制一系列点?
我正在研究一个将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) 我正在使用Landsat图像来计算净辐射.在我转换的反射光栅图层中有非常低的负值(例如:-0.000003).我想确保我的反射率为0 - 1,以减少我未来计算中的错误.
如何在R中将小于0的栅格值替换为"NA".类似于栅格计算功能.我不确定如何提供一个例子,但我确定你们其中一个可以帮助我,是吗?
这是我从Bastiaanssen等人得到的反射率的等式.(1998)
假设,pb1表示Landsat的带1的反射率,pi = 3.14 ...,lb1 =带1的辐射率,ESUN =带1的外大气值,dr =一年中的相对地球太阳距离.
#Calculate reflectivity per band. QC: Always 0 to 1
pb1 = (pi * lb1)/(ESUN1 * cos(solzen) * dr)
Run Code Online (Sandbox Code Playgroud)
创建此栅格后,我想要做的就是将小于0的pb1值设置为NA.
救命?
我编写了一个R函数,gdal_calc.py用于计算RasterStack(一系列输入栅格文件)的像素值最小值.我这样做是因为它比raster::min大型栅格更快.该函数最多可以存储23个文件,但在传递24个或更多文件时会抛出警告,返回填充了零的输出栅格.
由于R只是准备系统调用python gdal_calc.py,这个问题不是R特有的,我鼓励python/numpy aficionados继续阅读.
这是功能.最终gdal_calc调用的结构显示在此帖子底部有问题的用法引发的警告消息中.
gdal_min <- function(infile, outfile, return_raster=FALSE, overwrite=FALSE) {
require(rgdal)
if(return_raster) require(raster)
# infile: The multiband raster file (or a vector of paths to multiple
# raster files) for which to calculate cell minima.
# outfile: Path to raster output file.
# return_raster: (logical) Should the output raster be read back into R?
# overwrite: (logical) Should outfile be overwritten if it exists?
gdal_calc <- Sys.which('gdal_calc.py')
if(gdal_calc=='') …Run Code Online (Sandbox Code Playgroud) raster ×10
r ×7
algorithm ×2
optimization ×2
bezier ×1
bounding-box ×1
crop ×1
dictionary ×1
gdal ×1
image ×1
javascript ×1
mosaic ×1
na ×1
numpy ×1
paperjs ×1
plot ×1
python ×1
resampling ×1
resolution ×1
stack ×1
utm ×1
zooming ×1