2016-03-02 12 views
2

У меня есть три объекта SpatialPointsDataFrame, которые на самом деле всего одна точка. Мое намерение состоит в том, чтобы сделать растр для каждого из них в той степени, которая включает точку, таким образом, что все ячейки, кроме точки, являются «NA», поэтому я могу использовать функцию distance() в пакете raster для создания растра слой, где значение z - это расстояние до единственной ячейки, в которой z не является «NA».Проблемы с функцией растеризации в R

Мой код работает без проблем с первым из трех объектов, но появляется следующее сообщение об ошибке для двух других:

error in seq.default(zrng[1], zrng[2], length.out = cuts + 2) : 
    'from' cannot be NA, NaN or infinite 
    In addition: Warning messages: 
    1: In asMethod(object) : 
     complete map seems to be NA's -- no selection was made 
    2: In min(x) : no non-missing arguments to min; returning Inf 
    3: In max(x) : no non-missing arguments to max; returning -Inf 

Я двойной и тройной проверить, что мои пункты содержатся в степени растр, и я действительно не могу точно определить проблему

Вот мой код:

library(raster) 

TIM <- data.frame() 
TIM[1,1] <- -13.8309 
TIM[1,2] <- 28.9942 

VEN <- data.frame() 
VEN[1,1] <- -15.7886 
VEN[1,2] <- 27.8444 

MCL <- data.frame() 
MCL[1,1] <- -13.5325 
MCL[1,2] <- 29.2914 


coordinates(TIM) <- ~V1+V2 
coordinates(VEN) <- ~V1+V2 
coordinates(MCL) <- ~V1+V2 

bb2 <- matrix(c(-20, -9.5, 20.5, 31.5), nrow = 2, ncol = 2, byrow = T) 
bb2 <- extent(bb2) 

r <- raster(nrows = 1217, ncols = 1047) 
r <- setExtent(r, bb2, keepres=F) 

rMCL <- rasterize(MCL, r) 
spplot(rMCL) 

#so far so good, but from now on it doesn't work 

rVEN <- rasterize(VEN, r) 
spplot(rVEN) 


rTIM <- rasterize(TIM, r) 
spplot(rTIM) 

Edit: Я попытался превращения его в SpatialGridDataF rame, и я получаю его, но моя точка зрения находится не в растре, т. е. сюжет пуст. Код:

rr <- as(rTIM, "SpatialGridDataFrame") 
spplot(rr) 
#this produces an empty plot 

Я также попытался черчения его в растр без заранее определенного количества строк и столбцов, и она работает:

r <- raster() 
r <- setExtent(r, bb2, keepres=F) 
rTIM <- rasterize(TIM, r) 
spplot(rTIM) 
# this produces a raster containing my point 

Проблема заключается в том, я действительно должен был бы установить разрешение графика, так что каждая ячейка растра представляет собой приблизительно 1 квадрат километра, что я получаю от количества строк и столбцов, которые я использовал ранее. Есть идеи?

ответ

0

я могу заставить его работать, добавляя все три набора координат одной и той же dataframe, а затем с помощью функции подсчета при создании растра:

library(raster) 

# Add all 3 sets of coordinates to the same dataframe 

df <- data.frame() 
df[1,1] <- -13.8309 
df[1,2] <- 28.9942 
df[2,1] <- -15.7886 
df[2,2] <- 27.8444 
df[3,1] <- -13.5325 
df[3,2] <- 29.2914 

# Create new column in dataframe (we will use this for the count function) 

df$x <- c(1,1,1) 

# Convert to spatial points dataframe 

df.sp <- df 
coordinates(df.sp) <- ~ V1+V2 

# Make raster 

bb2 <- matrix(c(-20, -9.5, 20.5, 31.5), nrow = 2, ncol = 2, byrow = T) 
bb2 <- extent(bb2) 

r <- raster(nrows = 1217, ncols = 1047) 
r <- setExtent(r, bb2, keepres=F) 

# Rasterise using the count function 

raster <- rasterize(df.sp, r, field= "x", fun="count") 

# The table shows there are 3 cells with a value of 1 so it seems to have worked 

table(values(raster)) 

1 
3 

spplot(raster) 

raster 

class  : RasterLayer 
dimensions : 1217, 1047, 1274199 (nrow, ncol, ncell) 
resolution : 0.01002865, 0.00903862 (x, y) 
extent  : -20, -9.5, 20.5, 31.5 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory 
names  : layer 
values  : 1, 1 (min, max) 

Сюжет не делает много смысла для меня, но я думаю, это потому, что у вас много клеток в вашем растре, чтобы вы ничего не могли увидеть. Значения в растре определенно являются 3 ячейками со значением 1, а все остальные - NA, поэтому я думаю, это то, что вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^