/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.styling; import org.opengis.filter.expression.Expression; import org.opengis.style.OverlapBehavior; /** * The RasterSymbolizer describes how to render raster/matrix-coverage data * (e.g., satellite photos, DEMs). * * <p> * The details of this object are taken from the <a * href="https://portal.opengeospatial.org/files/?artifact_id=1188"> OGC * Styled-Layer Descriptor Report (OGC 02-070) version 1.0.0.</a>: * <pre><code> * <xs:element name="RasterSymbolizer"> * <xs:complexType> * <xs:sequence> * <xs:element ref="sld:Geometry" minOccurs="0"/> * <xs:element ref="sld:Opacity" minOccurs="0"/> * <xs:element ref="sld:ChannelSelection" minOccurs="0"/> * <xs:element ref="sld:OverlapBehavior" minOccurs="0"/> * <xs:element ref="sld:ColorMap" minOccurs="0"/> * <xs:element ref="sld:ContrastEnhancement" minOccurs="0"/> * <xs:element ref="sld:ShadedRelief" minOccurs="0"/> * <xs:element ref="sld:ImageOutline" minOccurs="0"/> * </xs:sequence> * </xs:complexType> * </xs:element> * </code></pre> * The following example applies a coloring to elevation (DEM) data (quantities * are in meters): * <pre> * <RasterSymbolizer> * <Opacity>1.0</Opacity> * <ColorMap> * <ColorMapEntry color="#00ff00" quantity="-500"/> * <ColorMapEntry color="#00fa00" quantity="-417"/> * <ColorMapEntry color="#14f500" quantity="-333"/> * <ColorMapEntry color="#28f502" quantity="-250"/> * <ColorMapEntry color="#3cf505" quantity="-167"/> * <ColorMapEntry color="#50f50a" quantity="-83"/> * <ColorMapEntry color="#64f014" quantity="-1"/> * <ColorMapEntry color="#7deb32" quantity="0"/> * <ColorMapEntry color="#78c818" quantity="30"/> * <ColorMapEntry color="#38840c" quantity="105"/> * <ColorMapEntry color="#2c4b04" quantity="300"/> * <ColorMapEntry color="#ffff00" quantity="400"/> * <ColorMapEntry color="#dcdc00" quantity="700"/> * <ColorMapEntry color="#b47800" quantity="1200"/> * <ColorMapEntry color="#c85000" quantity="1400"/> * <ColorMapEntry color="#be4100" quantity="1600"/> * <ColorMapEntry color="#963000" quantity="2000"/> * <ColorMapEntry color="#3c0200" quantity="3000"/> * <ColorMapEntry color="#ffffff" quantity="5000"/> * <ColorMapEntry color="#ffffff" quantity="13000"/> * </ColorMap> * <OverlapBehavior> * <AVERAGE/> * </OverlapBehavior> * <ShadedRelief/> * </RasterSymbolizer> * </pre> * Here is a rather artificial mutli-band raster symbol: * <pre> * <RasterSymbolizer> * <Opacity>1.0</Opacity> * <ColorMap> * <ColorMapEntry color="#000000" quantity="0"/> * <ColorMapEntry color="#ffffff" quantity="255"/> * </ColorMap> * <ChannelSelection> * <RedChannel> * <SourceChannelName>1</SourceChannelName> * <ContrastEnhancement> * <Histogram/> * </ContrastEnhancement> * </RedChannel> * <GreenChannel> * <SourceChannelName>2</SourceChannelName> * <ContrastEnhancement> * <GammaValue>2.5</GammaValue> * </ContrastEnhancement> * </GreenChannel> * <BlueChannel> * <SourceChannelName>3</SourceChannelName> * <ContrastEnhancement> * <Normalize/> * </ContrastEnhancement> * </BlueChannel> * </ChannelSelection> * <OverlapBehavior> * <LATEST_ON_TOP/> * </OverlapBehavior> * <ContrastEnhancement> * <GammaValue>1.0</GammaValue> * </ContrastEnhancement> * </RasterSymbolizer> * </PRE> * $Id$ * </p> * * @author Ian Turton, CCG * * @source $URL$ */ public interface RasterSymbolizer extends org.opengis.style.RasterSymbolizer,Symbolizer { /** * sets the opacity for the coverage, it has the usual meaning. * * @param opacity An expression which evaluates to the the opacity (0-1) */ void setOpacity(Expression opacity); /** * The ChannelSelection element specifies the false-color channel selection * for a multi-spectral raster source (such as a multi-band * satellite-imagery source). Either a channel may be selected to display * in each of red, green, and blue, or a single channel may be selected to * display in grayscale. (The spelling ?gray? is used since it seems to * be more common on the Web than ?grey? by a ratio of about 3:1.) * Contrast enhancement may be applied to each channel in isolation. * Channels are identified by a system and data-dependent character * identifier. Commonly, channels will be labelled as ?1?, ?2?, etc. * * @param channel the channel selected */ void setChannelSelection(org.opengis.style.ChannelSelection channel); /** * The ChannelSelection element specifies the false-color channel selection * for a multi-spectral raster source (such as a multi-band * satellite-imagery source). Either a channel may be selected to * display in each of red, green, and blue, or a single channel may be * selected to display in grayscale. (The spelling ?gray? is used since * it seems to be more common on the Web than ?grey? by a ratio of about * 3:1.) Contrast enhancement may be applied to each channel in isolation. * Channels are identified by a system and data-dependent character * identifier. Commonly, channels will be labelled as ?1?, ?2?, etc. * * @return the ChannelSelection object set or null if none is available. */ ChannelSelection getChannelSelection(); /** * The OverlapBehavior element tells a system how to behave when multiple * raster images in a layer overlap each other, for example with * satellite-image scenes. LATEST_ON_TOP and EARLIEST_ON_TOP refer to the * time the scene was captured. AVERAGE means to average multiple scenes * together. This can produce blurry results if the source images are not * perfectly aligned in their geo-referencing. RANDOM means to select an * image (or piece thereof) randomly and place it on top. This can * produce crisper results than AVERAGE potentially more efficiently than * LATEST_ON_TOP or EARLIEST_ON_TOP. The default behaviour is * system-dependent. * * @param overlap the expression which evaluates to LATEST_ON_TOP, * EARLIEST_ON_TOP, AVERAGE or RANDOM */ void setOverlap(Expression overlap); /** * The OverlapBehavior element tells a system how to behave when multiple * raster images in a layer overlap each other, for example with * satellite-image scenes. LATEST_ON_TOP and EARLIEST_ON_TOP refer to the * time the scene was captured. AVERAGE means to average multiple scenes * together. This can produce blurry results if the source images are * not perfectly aligned in their geo-referencing. RANDOM means to select * an image (or piece thereof) randomly and place it on top. This can * produce crisper results than AVERAGE potentially more efficiently than * LATEST_ON_TOP or EARLIEST_ON_TOP. The default behaviour is * system-dependent. * * @return The expression which evaluates to LATEST_ON_TOP, * EARLIEST_ON_TOP, AVERAGE or RANDOM */ Expression getOverlap(); /** * Set the overlap behavior. * @param overlapBehavior */ void setOverlapBehavior(OverlapBehavior overlapBehavior); /** * The ColorMap element defines either the colors of a palette-type raster * source or the mapping of fixed-numeric pixel values to colors. For * example, a DEM raster giving elevations in meters above sea level can * be translated to a colored image with a ColorMap. The quantity * attributes of a color-map are used for translating between numeric * matrixes and color rasters and the ColorMap entries should be in order * of increasing numeric quantity so that intermediate numeric values can * be matched to a color (or be interpolated between two colors). Labels * may be used for legends or may be used in the future to match character * values. Not all systems can support opacity in colormaps. The default * opacity is 1.0 (fully opaque). Defaults for quantity and label are * system-dependent. * * @param colorMap the ColorMap for the raster */ void setColorMap(org.opengis.style.ColorMap colorMap); /** * The ColorMap element defines either the colors of a palette-type raster * source or the mapping of fixed-numeric pixel values to colors. For * example, a DEM raster giving elevations in meters above sea level can * be translated to a colored image with a ColorMap. The quantity * attributes of a color-map are used for translating between numeric * matrixes and color rasters and the ColorMap entries should be in order * of increasing numeric quantity so that intermediate numeric values can * be matched to a color (or be interpolated between two colors). Labels * may be used for legends or may be used in the future to match character * values. Not all systems can support opacity in colormaps. The * default opacity is 1.0 (fully opaque). Defaults for quantity and * label are system-dependent. * * @return the ColorMap for the raster */ ColorMap getColorMap(); /** * The ContrastEnhancement element defines contrast enhancement for a * channel of a false-color image or for a color image. In the case of a * color image, the relative grayscale brightness of a pixel color is * used. ?Normalize? means to stretch the contrast so that the dimmest * color is stretched to black and the brightest color is stretched to * white, with all colors in between stretched out linearly. ?Histogram? * means to stretch the contrast based on a histogram of how many colors * are at each brightness level on input, with the goal of producing equal * number of pixels in the image at each brightness level on output. This * has the effect of revealing many subtle ground features. A ?GammaValue? * tells how much to brighten (value greater than 1.0) or dim (value less * than 1.0) an image. The default GammaValue is 1.0 (no change). If none * of Normalize, Histogram, or GammaValue are selected in a * ContrastEnhancement, then no enhancement is performed. * * @param ce the contrastEnhancement */ void setContrastEnhancement(org.opengis.style.ContrastEnhancement ce); /** * The ContrastEnhancement element defines contrast enhancement for a * channel of a false-color image or for a color image. In the case of a * color image, the relative grayscale brightness of a pixel color is * used. ?Normalize? means to stretch the contrast so that the dimmest * color is stretched to black and the brightest color is stretched to * white, with all colors in between stretched out linearly. ?Histogram? * means to stretch the contrast based on a histogram of how many colors * are at each brightness level on input, with the goal of producing * equal number of pixels in the image at each brightness level on output. * This has the effect of revealing many subtle ground features. A * ?GammaValue? tells how much to brighten (value greater than 1.0) or dim * (value less than 1.0) an image. The default GammaValue is 1.0 (no * change). If none of Normalize, Histogram, or GammaValue are selected in * a ContrastEnhancement, then no enhancement is performed. * * @return the ContrastEnhancement */ ContrastEnhancement getContrastEnhancement(); /** * The ShadedRelief element selects the application of relief shading (or * ?hill shading?) to an image for a three-dimensional visual effect. It * is defined as: Exact parameters of the shading are system-dependent * (for now). If the BrightnessOnly flag is ?0? (false, default), the * shading is applied to the layer being rendered as the current * RasterSymbol. If BrightnessOnly is ?1? (true), the shading is applied * to the brightness of the colors in the rendering canvas generated so * far by other layers, with the effect of relief-shading these other * layers. The default for BrightnessOnly is ?0? (false). The * ReliefFactor gives the amount of exaggeration to use for the height of * the ?hills.? A value of around 55 (times) gives reasonable results for * Earth-based DEMs. The default value is system-dependent. * * @param relief the shadedrelief object */ void setShadedRelief(org.opengis.style.ShadedRelief relief); /** * The ShadedRelief element selects the application of relief shading (or * ?hill shading?) to an image for a three-dimensional visual effect. It * is defined as: Exact parameters of the shading are system-dependent * (for now). If the BrightnessOnly flag is ?0? (false, default), the * shading is applied to the layer being rendered as the current * RasterSymbol. If BrightnessOnly is ?1? (true), the shading is applied * to the brightness of the colors in the rendering canvas generated so * far by other layers, with the effect of relief-shading these other * layers. The default for BrightnessOnly is ?0? (false). The * ReliefFactor gives the amount of exaggeration to use for the height of * the ?hills.? A value of around 55 (times) gives reasonable results for * Earth-based DEMs. The default value is system-dependent. * * @return the shadedrelief object */ ShadedRelief getShadedRelief(); /** * The ImageOutline element specifies that individual source rasters in a * multi-raster set (such as a set of satellite-image scenes) should be * outlined with either a LineStringSymbol or PolygonSymbol. It is defined * as: * <pre> * <xs:element name="ImageOutline"> * <xs:complexType> * <xs:choice> * <xs:element ref="sld:LineSymbolizer"/> * <xs:element ref="sld:PolygonSymbolizer"/> * </xs:choice> * </xs:complexType> * </xs:element> * </pre> * An Opacity of 0.0 can be selected for the main raster to avoid rendering * the main-raster pixels, or an opacity can be used for a * PolygonSymbolizer Fill to allow the main-raster data be visible through * the fill. * * @param symbolizer the symbolizer to be used. If this is <B>not</B> a * polygon or a line symbolizer an unexpected argument exception * may be thrown by an implementing class. */ void setImageOutline(org.opengis.style.Symbolizer symbolizer); /** * The ImageOutline element specifies that individual source rasters in a * multi-raster set (such as a set of satellite-image scenes) should be * outlined with either a LineStringSymbol or PolygonSymbol. It is * defined as: * <pre> * <xs:element name="ImageOutline"> * <xs:complexType> * <xs:choice> * <xs:element ref="sld:LineSymbolizer"/> * <xs:element ref="sld:PolygonSymbolizer"/> * </xs:choice> * </xs:complexType> * </xs:element> * </pre> * An Opacity of 0.0 can be selected for the main raster to avoid rendering * the main-raster pixels, or an opacity can be used for a * PolygonSymbolizer Fill to allow the main-raster data be visible through * the fill. * * @return The relevent symbolizer */ Symbolizer getImageOutline(); }