Soy nuevo en R y estoy usando el paquete raster. Tengo un problema para extraer polígonos de un archivo ráster existente. Si yo uso
extract(raster, poly_shape)
La función en el ráster siempre crea una lista con los datos. Lo que realmente quiero es extraer otro archivo ráster que pueda cargar con ArcGIS nuevamente. Después de leer un poco más, creo que la función de recorte es lo que realmente necesito. Pero cuando trato de usar esta función
crop(raster, poly_shape)
Me sale este error:
Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap
Los archivos ráster y poly_shape son los mismos para ambas funciones. ¿Puedes decirme qué podría estar mal aquí? ¿Es correcto que la función de recorte cree otro ráster y no una lista?
EDITAR : La función de extensión () no funciona para mí. Todavía recibo el mismo error. ¡Pero estoy seguro de que los 2 conjuntos de datos se superponen! Con el
extract(raster, poly_shape)
Obtengo los datos correctos. Solo como una lista y no como una trama como quiero tenerla. Acabo de cargar los conjuntos de datos en ArcGIS antes y se ajustan muy bien, así que no verifiqué la proyección. Ahora lo intenté
projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"
y puedes ver que las proyecciones no encajan. La función de extracción parece ser capaz de transformar automáticamente los archivos de la manera correcta. Lo sé porque hice lo siguiente:
- Corté la parte exacta del polígono que extraje en R también en ArcGIS
- Calculé la suma de todos los valores del polígono R extraído (lista)
- Calculé la suma de todas las celdas ráster que corté en ArcGIS
Los 2 tienen exactamente el mismo resultado, así que supongo que la conclusión debería ser que la función de extracción funcionó correctamente. Ahora tengo 2 opciones, supongo:
- Necesito una forma de volver a sacar un Ráster de la lista extraída o
- Los 2 conjuntos de datos (raster + poly_shape) deben usar la misma proyección y la función de recorte debería funcionar
¿Qué sugerirías hacer aquí?
Respuestas:
La función de extracción se comporta exactamente como debería. Puede forzar la función de recorte para usar la extensión del polígono y luego enmascarar el objeto para devolver el ráster exacto que representa el área del polígono. Si continúa recibiendo el error, significa que sus datos, de hecho, no se superponen.
Tenga en cuenta que R no realiza la proyección "sobre la marcha", por lo tanto, verifique sus proyecciones. Puede verificar si sus extensiones se superponen usando la función "extensión ()".
Aquí hay un ejemplo de recorte usando la extensión del polígono y luego enmascarando el ráster resultante usando el polígono "rasterizado".
fuente
spTransform
desde elsp
paquete (que a veces se carga automáticamente con otros paquetes R espaciales) permite la reproyección para que ambos archivos estén en la misma proyección, por ejemplo.good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
Lo que realmente busqué fue la
mask()
función.mask(raster, poly_shape)
funciona sin errores y devuelve lo que busqué.
fuente
projection(raster) = projection(poly_shape)
y al revésprojection(poly_shape) = projection(raster)
, pero en ambos sentidos producir el mismo error:Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap
. ¿Hay alguna manera de ver qué proyección se usa sobre la marcha usando la función extract () (porque obviamente funciona)?mask(raster, poly_shape)
funciona sin errores y devuelve lo que busqué.La extensión funciona bien ... Creo que Xmin, Xmax, Ymin e Ymax de su extensión son diferentes de las X e Y de su ráster, es decir, están opuestas
fuente