2016-12-19 20 views
1

У меня есть SpatialPoints объект с 3-х измерениях:Удаление третье измерение в SpatialPointsDataFrame

x <- c(1,1,1,2,2,2,3,3,3) 
y <- c(1,2,3,1,2,3,1,2,3) 
z <- c(1,3,5,2,1,2,1,2,3) 
xyz <- cbind(x,y,z) 
ss <- SpatialPoints(xyz) 
dimensions(ss) 

И в raster объекта:

rr <- raster(matrix(round(runif(49,0,10)),7,7), xmn=0, xmx=4, ymn=0, ymx=4, crs=NA, template=NULL) 

Я хочу, чтобы извлечь значения растра с использованием SpatialPoints объекта:

extract(rr,ss) 
#Error in .xyValues(x, coordinates(y), ..., df = df) : 
# xy should have 2 columns only. 
#Found these dimensions: 9, 3 

Вы можете визуализировать данные, если вы нт:

plot(rr) 
plot(ss, add=T) 

Таким образом, проблема в том, что функция extract пакета растрового требует 2 объекта измерения SpatialPoints. Моя (по моим реальным данным) в 3-х мерных. Есть ли способ отказаться от 3-го измерения моей формы фигуры? Я пробовал:

coordinates(ss) <- coordinates(ss)[,-3] 
#Error in `coordinates<-`(`*tmp*`, value = c(1, 1, 1, 2, 2, 2, 3, 3, 3, : 
# setting coordinates cannot be done on Spatial objects, where they have #already been set 

Я не хочу, чтобы перестроить форму с нуля.

+0

вы ищете это: сс @ координатам [, 1: 2]? – MLavoie

+0

@MLavois, что вы говорите, дает мне два измерения в виде матрицы (что совпадает с моим: 'coord (ss) [, - 3]'), это не то, что я хочу, я хочу новый объект формы, но с только 2 измерения, а не три. Все остальное одинаково (данные, проекция и т. Д.) – Bastien

+1

Просто перезапишите слот 'coords':' ss @ coords <- ss @ coords [, 1: 2] ' – rcs

ответ

1

Просто перезаписать coords слот объекта S4:

[email protected] <- [email protected][, 1:2] 

Я не знаю, как создается ваш объект SpatialPoints, но если вы используете rgdal::readOGR есть pointDropZ аргумент (по умолчанию FALSE)

+0

Аргумент 'pointDropZ' также является хорошим решением, о котором я не знал. Я буду использовать этот, поскольку я использую 'readOGR'. Благодарю. – Bastien

0

@rcs ответ лучше, но это работает, а также:

ss <- SpatialPoints(coordinates(ss)[,-3]) 

, и если у вас есть SpatialPointsDataFrame:

ss <- SpatialPointsDataFrame(coordinates(ss)[,-3], [email protected],proj4string=CRS(proj4string(ss)))