Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

19 votos

Cómo hacer trama de datos de puntos irregulares sin interpolación

Yo estaba tratando de hacer una imagen de trama de un irregularmente espaciados punto de la base de datos. Los datos parecen-

> head(s100_ras)
         x       y         z
1 267573.9 2633781 213.29545
2 262224.4 2633781  69.78261
3 263742.7 2633781  51.21951
4 259328.4 2633781 301.98413
5 264109.8 2633781 141.72414
6 255094.8 2633781  88.90244

Quiero que estos 'z' valores dentro de una malla que he creado por

# Create a fine mesh grid
my_mesh=expand.grid(seq(min(s100_ras$Y),max(s100_ras$Y),l=100),
                    seq(min(s100_ras$X),max(s100_ras$X),l=100))

También quiero que los valores z para ser asignado como 'NA' para los puntos de la malla que están fuera de los puntos de datos. Los puntos por encima de la malla se parece a esto: https://drive.google.com/file/d/0B6GUNg-8d30vYzlwTkhvaHBFTnc/edit?usp=sharing cuando me parcela

plot(my_mesh)
points(s100_ras$Y, s100_ras$X, pch="*", col='blue')

El problema es que no estoy seguro de cómo construir en el presente, los siguientes pasos no funcionan porque mi malla de cuadrícula y los puntos de datos no son de la misma escala!!

library(rgdal)
library(raster)
xyz<-cbind(my_mesh, s100_ras)
r <- rasterFromXYZ(xyz)
image(r)

Si intento hacer un ráster sólo por el uso de los puntos de datos (sin malla), R arroja un error ya que mis datos irregularmente espaciados!

library(sp)
s100_ras <- data.frame(expand.grid(x = s100_ras$Y, y = s100_ras$X), 
                       z = as.vector(s100_ras$mean))
coordinates(s100_ras) <- ~x+y
proj4string(s100_ras) <- CRS("+proj=utm +zone=46 +datum=WGS84")
gridded(s100_ras) = TRUE

suggested tolerance minimum: 0.916421 
Error in points2grid(points, tolerance, round) : 
  dimension 1 : coordinate intervals are not constant

Por otra parte, yo estaba tratando de jugar con "rasterizar" función (para el irregular grids) de la 'trama' del paquete, pero no podía conseguir una manera con ella :(. Sé cómo interpolar y hacer una cuadrícula regular, pero en aras de la originalidad, quiero EVITAR la interpolación. Es posible hacer un mapa de la irregularmente espaciados puntos de datos sin idw o métodos de kriging? Gracias de antemano.

25voto

SteveBurkett Puntos 960

Supongo que quieres los datos de punto irregular en una trama regular. En ese caso, debería funcionar rasterizar y los ejemplos de? rasterizar mostrar cómo. Aquí es algo basado en los datos

s100 <- matrix(c(267573.9, 2633781, 213.29545, 262224.4, 2633781, 69.78261, 263742.7, 2633781, 51.21951, 259328.4, 2633781, 301.98413, 264109.8, 2633781, 141.72414, 255094.8, 2633781, 88.90244),  ncol=3,  byrow=TRUE)
colnames(s100) <- c('X', 'Y', 'Z')

library(raster)
# set up an 'empty' raster, here via an extent object derived from your data
e <- extent(s100[,1:2])
e <- e + 1000 # add this as all y's are the same

r <- raster(e, ncol=10, nrow=2)
# or r <- raster(xmn=, xmx=,  ...

# you need to provide a function 'fun' for when there are multiple points per cell
x <- rasterize(s100[, 1:2], r, s100[,3], fun=mean)
plot(x)

6voto

RG-3 Puntos 128

Esto funcionó para mí - la solución fue usar SpatialPixelsDataFrame con el argumento de tolerancia sugerido (0.916421 en su caso):

points <- SpatialPoints(s100_ras[,c('x','y')], s100_ras[,c('z')]
pixels <- SpatialPixelsDataFrame(points, tolerance = 0.916421, points@data)
raster <- raster(pixels[,'z'])

sin embargo, debido al valor de alta tolerancia, la trama no se ajusta muy bien a los puntos originales. Podrían encajar mucho mejor.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X