Skip to content

Saving jpeg world files

3 messages · Mulholland, Tom, Roger Bivand, Tom Mulholland

#
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.

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
#
On Wed, 29 Nov 2006, Mulholland, Tom wrote:

            
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

  
    
#
Doh! I had completely forgotten about rgdal. That's exactly the route I 
need to take.

Thanks
Roger Bivand wrote: