Растрируйте пространственные полигоны в R, получая растр со значениями NA

У меня возникают проблемы с преобразованием этого пространственного полигонального фрейма данных в растр. Когда я выполняю преобразование, растр имеет значения NA. Как показано ниже:

 DL3
[1]
class       : SpatialPolygonsDataFrame 
features    : 126 
extent      : -15.04001, 46.1036, 3.759985, 31.71804  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +towgs84=0,0,0 +ellps=WGS84 
variables   : 1
names       :  LFRP 
min values  :    14 
max values  : 335.2 

Вот как я его растрирую:

##TO CONVERT TO RASTER
FunR<-function(r){
ext<-raster(extent(r))
crs(ext)<-crs(r)
D<-rasterize(r,ext,field=1,update=T)
D}

DL4<-lapply(DL3,FunR)
DL4
[1]
class       : RasterLayer 
dimensions  : 45, 40, 1800  (nrow, ncol, ncell)
resolution  : 1.52859, 0.6212901  (x, y)
extent      : -15.04001, 46.1036, 3.759985, 31.71804  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +towgs84=0,0,0 +ellps=WGS84 
data source : in memory
names       : layer 
values      : NA, NA  (min, max)

Что я могу делать неправильно? Мне нужна помощь с методом, чтобы значения в фрейме данных отражались в растре, пожалуйста.


person Joke O.    schedule 09.07.2015    source источник
comment
Сделайте пример более воспроизводимым для людей, которые могут захотеть вам помочь: не все пользователи SO имеют x или FRP на своих компьютерах! Дайте хотя бы утонченную версию того, что читает ваша самая первая команда.   -  person shekeine    schedule 09.07.2015
comment
Привет, Шекейне, первая строка была вставлена ​​по ошибке. Коды растеризации хорошо работают с кадрами данных пространственных точек, но не с кадрами данных пространственных полигонов. это моя задача.   -  person Joke O.    schedule 10.07.2015
comment
Вы должны предоставить образец своих данных, который другие пользователи SO могут использовать для воссоздания вашей проблемы. RobertH ниже сделал это, но его данные не воспроизводят вашу проблему: просто потому, что это не те данные, с которыми вы работаете.   -  person shekeine    schedule 10.07.2015


Ответы (1)


Принцип работает, как показано ниже.

library(raster)
SPP <- shapefile(system.file("external/lux.shp", package="raster"))
r <- raster(SPP, ncol=40, nrow=45)    
SPP2 <- rasterize(SPP, r, "ID_1")

Поскольку это не работает для вас, я предполагаю, что ваши полигоны очень малы по сравнению с размером растровой ячейки, так что ни одна из ячеек не покрыта. Можете ли вы попробовать с гораздо меньшими ячейками сетки? Если полигоны действительно такие маленькие, может иметь смысл использовать их центроиды (coordinates(SPP)) и растеризовать их (как точки).

person Robert Hijmans    schedule 10.07.2015
comment
Привет, Роберт, спасибо за ответ. Выложу полные коды. Исходные данные на самом деле были точечными данными с координатами и площадью. Есть ли другой способ включить площадь и координаты точки, а затем написать растр, пожалуйста? - person Joke O.; 10.07.2015
comment
Спасибо, @RobertH. Основываясь на вашей рекомендации, я создал действительно крошечные ячейки сетки, и это сработало: (r ‹- растр (SPP, ncol=1000, nrow=1000)) - person Joke O.; 10.07.2015
comment
Если у вас есть точечные данные, вы можете напрямую растрировать точки. Или вы можете сначала создать полигоны близости и растрировать их: library(dismo); pols <- voronoi(points) - person Robert Hijmans; 10.07.2015