package org.geotools.coverage.io.range.impl;
import java.awt.image.ColorModel;
import java.awt.image.RenderedImage;
import java.awt.image.SampleModel;
import java.util.Collections;
import java.util.Set;
import javax.imageio.ImageTypeSpecifier;
import javax.measure.unit.Unit;
import org.geotools.coverage.TypeMap;
import org.geotools.coverage.io.range.BandDescriptor;
import org.geotools.feature.NameImpl;
import org.geotools.referencing.operation.transform.LinearTransform1D;
import org.geotools.util.NumberRange;
import org.geotools.util.SimpleInternationalString;
import org.opengis.coverage.SampleDimensionType;
import org.opengis.referencing.operation.MathTransform1D;
/**
*
* @author Simone Giannecchini, GeoSolutions SAS
*
*/
public class SyntheticBandDescriptor extends BandDescriptor {
/**
*
* @author Simone Giannecchini, GeoSolutions SAS
*
*/
public static class SyntheticBandDescriptorBuilder{
private double[] defaultNoDatavalues;
private NumberRange<Double> defaultRange;
private MathTransform1D defaultSampleTransformation;
private Set<SampleDimensionType> defaultSampleDimensionTypes;
public SyntheticBandDescriptorBuilder() {
}
public SyntheticBandDescriptorBuilder setDefaultNoDatavalues(final double[] defaultNoDatavalues){
this.defaultNoDatavalues=defaultNoDatavalues;
return this;
}
public SyntheticBandDescriptorBuilder setDefaultRange(NumberRange<Double> defaultRange) {
this.defaultRange = defaultRange;
return this;
}
public SyntheticBandDescriptorBuilder setDefaultSampleTransformation(
MathTransform1D defaultSampleTransformation) {
this.defaultSampleTransformation = defaultSampleTransformation;
return this;
}
public SyntheticBandDescriptorBuilder setDefaultSampleDimensionTypes(
Set<SampleDimensionType> defaultSampleDimensionTypes) {
this.defaultSampleDimensionTypes = defaultSampleDimensionTypes;
return this;
}
public SyntheticBandDescriptor build(){
return new SyntheticBandDescriptor(
this.defaultNoDatavalues,
this.defaultRange,
this.defaultSampleTransformation,
this.defaultSampleDimensionTypes);
}
}
public static SyntheticBandDescriptor create(final RenderedImage im){
return create(im.getColorModel(),im.getSampleModel());
}
public static SyntheticBandDescriptor create(final ColorModel cm, final SampleModel sm){
final SyntheticBandDescriptorBuilder builder = new SyntheticBandDescriptorBuilder();
builder.setDefaultSampleTransformation(LinearTransform1D.IDENTITY);
builder.setDefaultSampleDimensionTypes(Collections.singleton(TypeMap.getSampleDimensionType(sm, 0)));
builder.setDefaultRange(TypeMap.getRange(builder.defaultSampleDimensionTypes.iterator().next()));
return builder.build();
}
public static SyntheticBandDescriptor create(final ImageTypeSpecifier it){
return create(it.getColorModel(),it.getSampleModel());
}
public SyntheticBandDescriptor(
final double[] defaultNoDatavalues,
final NumberRange<Double> defaultRange,
final MathTransform1D defaultSampleTransformation,
final Set<SampleDimensionType> sampleDimensionTypes) {
super(
BandInterpretation.SYNTHETIC_VALUE,
defaultNoDatavalues,
defaultRange,
defaultSampleTransformation,
new NameImpl("ImageSyntheticBand"),
new SimpleInternationalString("band description for data synthetically created"),
sampleDimensionTypes,
Unit.ONE);
}
}