2017-06-12 1 views
0

J'utilise writeGDAL pour exporter des données raster au format PNG à utiliser comme superposition d'images sur Google Maps. L'image doit donc avoir le bon format et doit correspondre exactement à l'étendue du raster.Comment supprimer le remplissage ajouté à une image PNG créée avec writeGDAL

Lorsque j'exporte le raster UTM-projeté, le résultat est conforme à mes attentes, mais après avoir été projeté sur le système LatLong, le PNG généré a un remplissage autour de la zone raster.

Que dois-je faire pour me débarrasser de ce rembourrage?

UTM image without padding LatLong image with padding (black)

Ci-dessous un exemple de code qui crée 2 images qui démontrent le problème.

library(raster) 
library(rgdal) 

r <- raster(xmn=742273.5, xmx=742702.5, ymn=6812515.5, ymx=6812995.5, ncols=144, nrows=161) 
r <- setValues(r, 1:ncell(r)) 
projection(r) <- CRS('+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs') 
pr <- projectRaster(r, crs='+proj=longlat +datum=WGS84 +no_defs') 

#Coerce to SpatialPixelsDataFrame and prepare for writeGDAL 
rSpdf <- as(r, 'SpatialPixelsDataFrame') 
prSpdf <- as(pr, 'SpatialPixelsDataFrame') 
rSpdf$colors <- as.numeric(cut(rSpdf$layer, breaks = 255)) 
prSpdf$colors <- as.numeric(cut(prSpdf$layer, breaks = 255)) 
colorTable <- list(colorRampPalette(c('red', 'yellow', 'green4'))(256)) 

#Export in PNG format using writeGDAL 
writeGDAL(rSpdf[, 'colors'], 'utm.png', drivername = 'PNG', type = 'Byte', mvFlag = 0, colorTables = colorTable) 
writeGDAL(prSpdf[, 'colors'], 'geo.png', drivername = 'PNG', type = 'Byte', mvFlag = 0, colorTables = colorTable) 

#Optionally, the rasters can be exported to view in a spatial package (eg SAGA-GIS) 
#writeRaster(r, filename='utm.tif', format="GTiff", overwrite=TRUE) 
#writeRaster(pr, filename='geo.tif', format="GTiff", overwrite=TRUE) 

Répondre

1

En convertissant la trame projetée sur des points et forçant alors les points à un SpatialPixelsDataFrame (au lieu de contraindre la trame) le rembourrage est éliminée.

PNG without padding

library(raster) 
library(rgdal) 

r <- raster(xmn=742273.5, xmx=742702.5, ymn=6812515.5, ymx=6812995.5, ncols=144, nrows=161) 
r <- setValues(r, 1:ncell(r)) 
projection(r) <- CRS('+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs') 
pr <- projectRaster(r, crs='+proj=longlat +datum=WGS84 +no_defs') 

points <- rasterToPoints(pr, spatial = TRUE) 
prSpdf <- as(points, 'SpatialPixelsDataFrame') 

prSpdf$colors <- as.numeric(cut(prSpdf$layer, breaks = 10)) 
colorTable <- list(colorRampPalette(c('red', 'yellow', 'green4'))(11)) 

writeGDAL(prSpdf[, 'colors'], 'geo.png', drivername = 'PNG', type = 'Byte', mvFlag = 0, colorTables = colorTable)