5 votos

¿Es posible acortar un shapefile a un image() en R?

Estoy trabajando en la asignación de algunos netcdf de datos en R y se han de tener un tiempo difícil tratando de realizar un clip con un importados país shapefile que estoy usando. Aquí está mi pregunta de ayer. Si usted sabe algo acerca de que, siéntase libre de pop y de responder a esa pregunta. :)

PERO voy a empezar de nuevo aquí. Así que por mi trabajo, y estamos pensando en la cartografía de las toneladas y toneladas de datos meteorológicos en todo el mundo. Para la práctica, el chico proporcionar nuestros datos nos proporcionó algunos "ejemplo" de datos a jugar. Mi jefe me gustaría para mí para crear mis mapas en R. Estos mapas están destinados a ser el período de devolución de los mapas. Los datos están en formato netcdf. Yo era capaz de mapear los datos netcdf con el levelplot función de la rasterVis paquete. Yo también era capaz de mapear los datos netcdf, con una simple imagen de la función. Aquí está mi código (lo siento por el funky convenciones de nomenclatura; he estado jugando con esta):

library(maptools)
library(ncdf4)
library(RColorBrewer)
library(raster)

setwd("D:\\stuff")

#Madagascar shapefile
madagascar <- readShapeSpatial("MDG_adm0.shp")
plot(madagascar)

#Call on netcdf file
ncdf.data <- nc_open("swio_rpmaps_200_83.nc")

#Call on the 10 year wind return periods
returns <- ncvar_get(ncdf.data, "y010")

#Define latitude and longitude
lon <- ncdf.data$dim$longitude$vals
lat <- ncdf.data$dim$latitude$vals

#plot image of windspeeds
image(lon, lat, returns, col = cm.colors(9,alpha=.6), add = TRUE)
#plot Madagascar on top of windspeeds
plot(madagascar, add = T)

Aquí está el resultado de la imagen: enter image description here

Hay alguna forma de clip de la Madagascar shapefile a esta imagen? O de otra manera manipular los datos para que yo pueda realizar un clip? Lo ideal sería tener sólo los datos asociados dentro de los límites de cualquier país en el que estoy de asignación.

3voto

Denis Kash Puntos 16

Recogiendo la sugerencia de @hrbrmstr aquí está el código. Puesto que usted no proporciona un archivo de ejemplo, yo trato de imitar su situación y crear un ejemplo de la forma en que usted podría ser capaz de hacerlo con su archivo netcdf. El shapefile he extraído de la Tierra Natural.

library(maptools)
library(raster)
madagascar <- readShapeSpatial("MDG_adm0.shp")

## make up some values 
# I am trying to replicate the way you would do it with the netcdf file..
lon <- seq(42, 51, .05) 
lat <- seq(-29, -10, .1)
returns <- runif(length(lat) * length(lon))

image(lon, lat, matrix(returns, length(lon), length(lat)), col = cm.colors(9,alpha=.6))
plot(madagascar, add = T)

enter image description here

A continuación, utilizamos los valores del archivo netcdf para crear una trama objeto (un RasterLayer para ser exactos) con las que puede trabajar. Para ello tenemos que configurar las dimensiones de la trama (nrows y ncols) así como los valores min y max para ambas dimensiones (x y y). A continuación, utilizamos el setValues función para agregar los valores (en su caso windspeeds) para cada celda ráster.

ACTUALIZACIÓN: en Vez de hacer esto, crear un mapa de bits directamente el objeto , como señala @RobertH .

# create the raster object using the values from above
r <- raster(nrows=length(lon), ncols=length(lat), 
        xmn=min(lon), xmx=max(lon),
        ymn=min(lat) ,ymx=max(lat))
r <- setValues(r, returns)

plot(r)
plot(madagascar, add = T)

enter image description here

Por último, utilizamos la mask función de clip de la trama. Esta función toma cualquier Espacial* objeto como máscara, un SpatialPolygonsDataframe (como su madagascar uno) es uno de ellos.

#clip
r.clipped <- mask(r, madagascar)
plot(r.clipped)

enter image description here

2voto

SteveBurkett Puntos 960

Agregar a la respuesta de cengel, para mostrar cómo acceder al archivo de FDCN como un objeto de RasterBrick y contine:

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