Hi,
I just created a Geotiff with two values and one single band (always the
same !).
Now I am able to display it and would like to stylize it through a sld file.
I generate my coverage like this :
this.rasterEnvelope = new Envelope2D(new DirectPosition2D(prj.getCRS(),
minLon, minLat),
new
DirectPosition2D(prj.getCRS(), maxLon, maxLat));
int rasterExtensionX = (int)((maxLon - minLon) / resolution);
int rasterExtensionY = (int)((maxLat - minLat) / resolution);
WritableRaster rasterCoverage =
RasterFactory.createBandedRaster(DataBuffer.TYPE_BYTE, rasterExtensionX,
rasterExtensionY, 1, null);
GridCoverageFactory gcf = new GridCoverageFactory(new
Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE));
GridCoverage2D gc = gcf.create(this.site.getName()+"_AH="+hs+"m"+"_TH="+ht,
rasterCoverage, this.rasterEnvelope,null,null,null,null,null);
final GeoTiffFormat format = new GeoTiffFormat();
// The parameters used to write a geotiff file.
final GeoTiffWriteParams wp = new GeoTiffWriteParams();
// No compression -> never mind the size of pictures, we must go fast
wp.setCompressionMode(GeoTiffWriteParams.MODE_DISABLED);
// We keep the tile size
wp.setTilingMode(GeoToolsWriteParams.MODE_DEFAULT);
final ParameterValueGroup paramWrite = format.getWriteParameters();
paramWrite.parameter(AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString()).setValue(wp);
File outFile = new
File(getCoveragesFolder(true).getPath()+File.separator+gc.getName()+".TIF");
GeoTiffWriter gtw = (GeoTiffWriter)format.getWriter(outFile);
gtw.write(gc,(GeneralParameterValue[])paramWrite.values().toArray(new
GeneralParameterValue[1]));
Then, I want to display my grid with the style like this :
MapLayer coveragelayer = new DefaultMapLayer(reader,
getCoverageLayerStyle()); // reader is the geotiffreader to the
geotiff
public static Style getCoverageLayerStyle(){
URL sld =
MSSProject.class.getResource("/org/mss/project/resources/HorizonCoverageStyle.xml");
SLDParser parser = new SLDParser(new StyleFactoryImpl());
try{
parser.setInput(sld);
}catch(IOException ioe){
ioe.printStackTrace();
}
return parser.readXML()[0];
}
finally, the style is described like this :
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:ogc="
http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
version="1.0.0">
<UserLayer>
<Name>horizon coverage</Name>
<UserStyle>
<Name>COV_HORIZON</Name>
<Title>Couverture Horizon</Title>
<Abstract>Style des couvertures à l'horizon</Abstract>
<FeatureTypeStyle>
<FeatureTypeName>Feature</FeatureTypeName>
<Rule>
<RasterSymbolizer>
<Opacity>1.0</Opacity>
<ColorMap>
<ColorMapEntry color="#000000"
quantity="0" label="nodata" opacity="0.0"/>
<ColorMapEntry color="#111111"
quantity="200" label="visible" opacity="0.5"/>
</ColorMap>
</RasterSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</UserLayer>
</StyledLayerDescriptor>
And I always get this exception when trying to display the layer :
java.lang.IllegalArgumentException: Le numéro de bande 1 n'est pas valide.
at
org.geotools.coverage.TypeMap.getColorInterpretation(TypeMap.java:513)
at
org.geotools.renderer.lite.gridcoverage2d.ColorMapNode.execute(ColorMapNode.java:296)
at
org.geotools.renderer.lite.gridcoverage2d.ColorMapNode.execute(ColorMapNode.java:52)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter$1.execute(StyleVisitorCoverageProcessingNodeAdapter.java:139)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.checkExecuted(BaseCoverageProcessingNode.java:234)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:336)
Caused: org.geotools.coverage.processing.CoverageProcessingException
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:338)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:41)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter.getOutput(StyleVisitorCoverageProcessingNodeAdapter.java:179)
at
org.geotools.renderer.lite.gridcoverage2d.ContrastEnhancementNode.execute(ContrastEnhancementNode.java:233)
at
org.geotools.renderer.lite.gridcoverage2d.ContrastEnhancementNode.execute(ContrastEnhancementNode.java:75)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter$1.execute(StyleVisitorCoverageProcessingNodeAdapter.java:139)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.checkExecuted(BaseCoverageProcessingNode.java:234)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:336)
Caused: org.geotools.coverage.processing.CoverageProcessingException
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:338)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:41)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter.getOutput(StyleVisitorCoverageProcessingNodeAdapter.java:179)
at
org.geotools.renderer.lite.gridcoverage2d.SubchainStyleVisitorCoverageProcessingAdapter.execute(SubchainStyleVisitorCoverageProcessingAdapter.java:111)
at
org.geotools.renderer.lite.gridcoverage2d.RasterSymbolizerHelper.execute(RasterSymbolizerHelper.java:67)
at
org.geotools.renderer.lite.gridcoverage2d.RasterSymbolizerHelper.execute(RasterSymbolizerHelper.java:47)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter$1.execute(StyleVisitorCoverageProcessingNodeAdapter.java:139)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.checkExecuted(BaseCoverageProcessingNode.java:234)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:336)
Caused: org.geotools.coverage.processing.CoverageProcessingException
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:338)
at
org.geotools.renderer.lite.gridcoverage2d.BaseCoverageProcessingNode.getOutput(BaseCoverageProcessingNode.java:41)
at
org.geotools.renderer.lite.gridcoverage2d.StyleVisitorCoverageProcessingNodeAdapter.getOutput(StyleVisitorCoverageProcessingNodeAdapter.java:179)
at
org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer.paint(GridCoverageRenderer.java:555)
at
org.geotools.renderer.lite.StreamingRenderer.renderRaster(StreamingRenderer.java:1848)
at
org.geotools.renderer.lite.StreamingRenderer.processSymbolizers(StreamingRenderer.java:1708)
at
org.geotools.renderer.lite.StreamingRenderer.process(StreamingRenderer.java:1654)
at
org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1598)
at
org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:642)
at
org.geotools.renderer.shape.ShapefileRenderer.renderWithStreamingRenderer(ShapefileRenderer.java:1475)
at
org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:1344)
at
org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:266)
at
org.geotools.renderer.shape.ShapefileRenderer.paint(ShapefileRenderer.java:1500)
at
org.geotools.gui.swing.map.map2d.stream.strategy.SingleBufferedImageStrategy.createBufferImage(SingleBufferedImageStrategy.java:132)
[catch] at
org.geotools.gui.swing.map.map2d.stream.strategy.SingleBufferedImageStrategy$DrawingThread.run(SingleBufferedImageStrategy.java:252)
So my question is : why does it try to read "band 1", when my raster is a
single band !? Did I make a mistake while creating the raster or while
creating the style ?
Thomas
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users