2017-06-12 76 views
0

我正在使用writeGDAL導出PNG格式的柵格數據以用作Google地圖上的圖像疊加層。因此圖像需要具有正確的寬高比,並且必須完全符合光柵範圍。如何刪除添加到使用writeGDAL創建的PNG圖像的填充

當我導出UTM投影柵格時,結果與預期的一樣,但在投影到LatLong系統後,生成的PNG在柵格區域的四周有填充。

我需要做些什麼才能擺脫這種填充?

UTM image without padding LatLong image with padding (black)

下面是其產生2倍的圖像,說明問題的示例代碼。

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) 

回答

1

通過投影光柵轉換成點,然後強迫所述指向SpatialPixelsDataFrame(而不是強迫的光柵)的填充被除去。

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) 
相關問題