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

Reply via email to