Saving jpeg world files
Doh! I had completely forgotten about rgdal. That's exactly the route I need to take. Thanks
Roger Bivand wrote:
On Wed, 29 Nov 2006, Mulholland, Tom wrote:
I am beginning to get a little bit bog eyed with the myriad of options there are within the various spatial packages. I am trying to find ways of porting the results I get within R into a GIS environment and I can't seem to see anything that would let me write a jpeg file with an appropriate world file.
The most direct route is to use a SpatialGridDataFrame or equivalently
SpatialPixelDataFrame, and writeGDAL() in rgdal. That gives very good
support for GeoTiff files. The JPEG driver is present, but much more
limited than GeoTiff - it has to be either single-band or three-band, and
only Byte data. For released rgdal, you would write the jpeg from a single
variable by stretching it over 0-255, taking integers, writing as GeoTiff
to a temp file, opening the file as a GDAL data set, copying to JPEG,
and saving:
library(sp)
library(rgdal)
data(meuse.grid)
coordinates(meuse.grid) <- c("x", "y")
gridded(meuse.grid) <- TRUE
# quantize
rd <- range(meuse.grid$dist)
meuse.grid$idist <- as.integer(255*(meuse.grid$dist-rd[1])/(rd[2]-rd[1]))
# write temporary GTiff
tf <- tempfile()
writeGDAL(meuse.grid["idist"], tf, drivername="GTiff", type="Byte")
# open temporary file as GDAL dataset and copy to JPEG
x <- GDAL.open(tf)
dx <- copyDataset(x, driver="JPEG", options="WORLDFILE=YES")
# and write out
td <- tempdir()
tf1 <- paste(td, "output.jpg", sep="/")
saveDataset(dx, tf1, options="WORLDFILE=YES")
GDAL.close(x)
GDAL.close(dx)
# check to see if worldfile present and OK (*.wld use cell centre
# registration, the bounding box goes to the cell boundaries
list.files(td)
slot(meuse.grid, "grid")
file.show(paste(td, "output.wld", sep="/"))
Had rgdal and the underlying GDAL library allowed jpeg files to be written
directly, this would be simpler. However, you may find that the software
that reads jpeg files also reads GeoTiff files, which are far more
flexible, taking many more data types, including floating point values.
For those interested in image overlays in Google Earth, this recipe lets
you make PNG files too (but so far I haven't got GE to read a worldfile to
place the image, and of course GE wants geographical coordinates). PNG
support an alpha channel too.
Hope this isn't too complicated. We probably need an interface between im
and sp classes so that getting from im to GDAL is simpler.
Roger
I have managed to create an ASCIIGrid but my first tests seem to indicate that not all grids are created equally. My experience with some of the "free" windows GIS applications is that jpg files seem to be more universally supported, so I thought that might be a more fruitful way to go. I will then have to worry less about making sure my output is the type that can be imported. It looks to me as if the class "im" in spatstat is conceptually straightforward to process. It looks as if all the attributes are there to create a world file. Since my data is already projected it would seem that I should be able to simply use the jpeg device for output (not that I have any idea how I'll go about that) and create a text file to go along with it. The first question is 'Am I missing something really simple?' and the second is "Is there a straightforward solution that I have already missed." Tom platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status major 2 minor 4.0 year 2006 month 10 day 03 svn rev 39566 language R version.string R version 2.4.0 (2006-10-03) Tom Mulholland Senior Demographer Applied Research and Modelling State and Regional Policy Department for Planning and Infrastructure Perth, Western Australia +61 (08) 9264 7936
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo