我是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:

我正在寻找一种快速有效的方法来找到包含玩家位置的(或者)最大正方形.
我目前正在做的是一种蛮力:
它的工作原理很简单,但感觉非常低效.显然我在这里做了很多冗余检查,我想知道是否有更聪明/更快的方法来做到这一点.有谁知道有效地做到这一点的算法?
(编辑)重要补充:除了玩家四处移动外,还会动态添加或移动障碍物或墙壁,因此这里的缓存或预先优化很难实现.
我正在研究一个将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) 包:
数据:
目的:
第一次尝试:
# 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) 与spplot()图例相比,如何使用ggplot改进空间栅格地图的图例?
我想使用ggplot()而不是ssplot()绘制空间地图,但是与spplot相比,我想提高一些方面:
## 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) 我有一个从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功能,但我仍然无法使其正常工作.我很感激有关如何做到这一点的任何建议.
我正在尝试绘制具有正值和负值的地图.
所有正值都应该是红色,而负值应该是蓝色,零应该是白色,就像这个带有离散颜色的样本图一样
以下是我正在使用的代码:
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)
非常感谢您提供可以应用于其他绘图练习的通用解决方案.
我正在使用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) 我正在尝试使用绘制空间栅格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) 我正在使用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对象包含了除感兴趣的预测之外的几个元素.无论如何,如何使用游侠在光栅堆栈上进行预测?
raster ×10
r ×8
ggplot2 ×2
algorithm ×1
bounding-box ×1
colorbar ×1
crop ×1
gis ×1
image ×1
javascript ×1
map ×1
maps ×1
mclapply ×1
optimization ×1
paperjs ×1
rasterizing ×1
resampling ×1
shapefile ×1
snow ×1
spatial ×1
stack ×1
zooming ×1