rdf4j-postgis  Version 0.1.0.0
WKBRasterWriter Class Reference

WKB Raster Writer, used in postGIS 2 but can be used elsewhere. More...

Public Member Functions

 WKBRasterWriter ()
 
void reset ()
 Reset values before new write call. More...
 
byte[] write (final GridCoverage coverage) throws IOException, FactoryException
 Encode given coverage in Postgis WKB. More...
 
void write (final GridCoverage coverage, final OutputStream stream) throws IOException, FactoryException
 Encode given coverage in Postgis WKB. More...
 
void write (final GridCoverage coverage, final OutputStream stream, final boolean littleEndian) throws IOException, FactoryException
 Encode given coverage in Postgis WKB. More...
 
byte[] write (final RenderedImage image, final AffineTransform gridToCRS, final int srid) throws IOException
 Encode given image in Postgis WKB. More...
 
byte[] write (final Raster image, final AffineTransform gridToCRS, final int srid) throws IOException
 Encode given image in Postgis WKB. More...
 
void write (final RenderedImage image, AffineTransform gridToCRS, final int srid, final OutputStream stream) throws IOException
 Encode given image in Postgis WKB. More...
 
void write (final Raster image, AffineTransform gridToCRS, final int srid, final OutputStream stream) throws IOException
 Encode given image in Postgis WKB. More...
 
void write (final Raster image, AffineTransform gridToCRS, final int srid, OutputStream stream, final boolean littleEndian) throws IOException
 Encode given image in Postgis WKB. More...
 

Detailed Description

WKB Raster Writer, used in postGIS 2 but can be used elsewhere.

Author
Johann Sorel (Geomatys)

Constructor & Destructor Documentation

◆ WKBRasterWriter()

46  {
47  }

Member Function Documentation

◆ reset()

void reset ( )

Reset values before new write call.

52  {
53  }

◆ write() [1/8]

byte [] write ( final GridCoverage  coverage) throws IOException, FactoryException

Encode given coverage in Postgis WKB.

Parameters
coverage: grid coverage 2d , not null
Returns
byte[] encoded image
Exceptions
IOException
62  {
63  final ByteArrayOutputStream out = new ByteArrayOutputStream();
64  write(coverage, out);
65  return out.toByteArray();
66  }
byte[] write(final GridCoverage coverage)
Encode given coverage in Postgis WKB.
Definition: WKBRasterWriter.java:62

Referenced by HexWKBRastDatatype.unparse(), WKBRastDatatype.unparse(), WKBRasterWriter.write(), and WKBRasterImageWriter.write().

◆ write() [2/8]

void write ( final GridCoverage  coverage,
final OutputStream  stream 
) throws IOException, FactoryException

Encode given coverage in Postgis WKB.

Parameters
coverage: grid coverage 2d , not null
stream: output stream to write in
Exceptions
IOException
75  {
76  write(coverage, stream, true);
77  }

References WKBRasterWriter.write().

◆ write() [3/8]

void write ( final GridCoverage  coverage,
final OutputStream  stream,
final boolean  littleEndian 
) throws IOException, FactoryException

Encode given coverage in Postgis WKB.

Parameters
coverage: grid coverage 2d , not null
stream: output stream to write in
littleEndian: wanted value encoding
Exceptions
IOException
88  {
89  final GridGeometry gridGeometry = coverage.getGridGeometry();
90  final CoordinateReferenceSystem crs = gridGeometry.getCoordinateReferenceSystem();
91  final Integer srid = IdentifiedObjects.lookupEPSG(crs);
92  if (srid == null) {
93  throw new IOException("CoordinateReferenceSystem does not have an EPSG code.");
94  }
95  final MathTransform gridToCRS = coverage.getGridGeometry().getGridToCRS(PixelInCell.CELL_CENTER);
96  if (!(gridToCRS instanceof AffineTransform)) {
97  throw new IOException("Coverage GridToCRS transform is not affine.");
98  }
99  final RenderedImage image = coverage.render(null);
100 
101  write(image, (AffineTransform)gridToCRS, srid, stream);
102  }

References WKBRasterWriter.write().

◆ write() [4/8]

void write ( final Raster  image,
AffineTransform  gridToCRS,
final int  srid,
final OutputStream  stream 
) throws IOException

Encode given image in Postgis WKB.

Parameters
image: image , not null
gridToCRS: image grid to crs, can be null
srid: image srid
stream: output stream to write in
Exceptions
IOException
160  {
161  write(image, gridToCRS, srid, stream, true);
162  }

References WKBRasterWriter.write().

◆ write() [5/8]

void write ( final Raster  image,
AffineTransform  gridToCRS,
final int  srid,
OutputStream  stream,
final boolean  littleEndian 
) throws IOException

Encode given image in Postgis WKB.

Parameters
image: image , not null
gridToCRS: image grid to crs, can be null
srid: image srid
stream: output stream to write in
littleEndian: wanted value encoding
Exceptions
IOException
175  {
176  if(gridToCRS == null){
177  gridToCRS = new AffineTransform();
178  }
179 
180  if (!(stream instanceof BufferedOutputStream)) {
181  stream = new BufferedOutputStream(stream);
182  }
183 
184  final DataOutput ds;
185  if(littleEndian){
186  ds = new LEDataOutputStream(stream);
187  }else{
188  ds = new DataOutputStream(stream);
189  }
190 
191  final SampleModel sm = image.getSampleModel();
192  final Raster raster = image;
193  final int nbBand = sm.getNumBands();
194  final int width = image.getWidth();
195  final int height = image.getHeight();
196  int databufferType = sm.getDataType();
197  if(databufferType == DataBuffer.TYPE_INT){
198  //special case, most image compression bands on single int when it would be byte
199  if(sm.getSampleSize()[0] <= 8){
200  databufferType = DataBuffer.TYPE_BYTE;
201  }
202  }
203 
204  final int pixelType = WKBRasterConstants.getPixelType(databufferType);
205  final int bytePerpixel = WKBRasterConstants.getNbBytePerPixel(pixelType);
206 
207  //endianess
208  ds.write( littleEndian ? 1 : 0 );
209  //version, 0 for now
210  ds.writeShort(0);
211  //number of bands
212  ds.writeShort(nbBand);
213  //grid to crs
214  ds.writeDouble(gridToCRS.getScaleX());
215  ds.writeDouble(gridToCRS.getScaleY());
216  ds.writeDouble(gridToCRS.getTranslateX());
217  ds.writeDouble(gridToCRS.getTranslateY());
218  ds.writeDouble(gridToCRS.getShearX());
219  ds.writeDouble(gridToCRS.getShearY());
220  //write srid
221  ds.writeInt(srid);
222  //width and height
223  ds.writeShort(width);
224  ds.writeShort(height);
225 
226  //write each band
227  for(int b=0;b<nbBand;b++){
228 
229  // band description
230  final byte flags = (byte) pixelType;
231  // OffDatabase = false
232  // TODO HasNodata : we don't have informations for no data
233  // this would requiere a SampleDimension object
234  // IsNodata = false
235  // Reserved = false
236  ds.write(flags);
237 
238  // TODO no data value
239  ds.write(new byte[bytePerpixel]);
240 
241  //write values
242  for(int y=raster.getMinY(),maxy=raster.getMinY()+height;y<maxy;y++){
243  for(int x=raster.getMinX(),maxx=raster.getMinX()+width;x<maxx;x++){
244  switch(databufferType){
245  case DataBuffer.TYPE_BYTE : ds.writeByte( (byte)raster.getSample(x, y, b)); break;
246  case DataBuffer.TYPE_SHORT : ds.writeShort( (short)raster.getSample(x, y, b)); break;
247  case DataBuffer.TYPE_USHORT : ds.writeShort( (short)raster.getSample(x, y, b)); break;
248  case DataBuffer.TYPE_INT : ds.writeInt( raster.getSample(x, y, b)); break;
249  case DataBuffer.TYPE_FLOAT : ds.writeFloat( raster.getSampleFloat(x, y, b)); break;
250  case DataBuffer.TYPE_DOUBLE : ds.writeDouble( raster.getSampleDouble(x, y, b)); break;
251  }
252  }
253  }
254 
255  }
256  stream.flush();
257  }

References WKBRasterConstants.getNbBytePerPixel(), and WKBRasterConstants.getPixelType().

◆ write() [6/8]

byte [] write ( final Raster  image,
final AffineTransform  gridToCRS,
final int  srid 
) throws IOException

Encode given image in Postgis WKB.

Parameters
image: image , not null
gridToCRS: image grid to crs, can be null
srid: image srid
Returns
byte[] encoded image
Exceptions
IOException
130  {
131  final ByteArrayOutputStream out = new ByteArrayOutputStream();
132  write(image, gridToCRS, srid, out);
133  return out.toByteArray();
134  }

References WKBRasterWriter.write().

◆ write() [7/8]

void write ( final RenderedImage  image,
AffineTransform  gridToCRS,
final int  srid,
final OutputStream  stream 
) throws IOException

Encode given image in Postgis WKB.

Parameters
image: image , not null
gridToCRS: image grid to crs, can be null
srid: image srid
stream: output stream to write in
Exceptions
IOException
146  {
147  write(image.getData(), gridToCRS, srid, stream, true);
148  }

References WKBRasterWriter.write().

◆ write() [8/8]

byte [] write ( final RenderedImage  image,
final AffineTransform  gridToCRS,
final int  srid 
) throws IOException

Encode given image in Postgis WKB.

Parameters
image: image , not null
gridToCRS: image grid to crs, can be null
srid: image srid
Returns
byte[] encoded image
Exceptions
IOException
114  {
115  final ByteArrayOutputStream out = new ByteArrayOutputStream();
116  write(image, gridToCRS, srid, out);
117  return out.toByteArray();
118  }

References WKBRasterWriter.write().