/**
* This file is hereby placed into the Public Domain. This means anyone is
* free to do whatever they wish with this file.
*/
package mil.nga.giat.process.elasticsearch;
public class RasterScale {
private static final float DEFAULT_SCALE_MIN = 0f;
private final Float scaleMin;
private final Float scaleMax;
private boolean scaleLog;
private Float dataMin;
private Float dataMax;
public RasterScale() {
this(null, null, false);
}
public RasterScale(boolean useLog) {
this(null, null, useLog);
}
public RasterScale(Float scaleMax) {
this(DEFAULT_SCALE_MIN, scaleMax, false);
}
public RasterScale(Float scaleMin, Float scaleMax) {
this(scaleMin, scaleMax, false);
}
public RasterScale(Float scaleMin, Float scaleMax, boolean scaleLog) {
this.scaleMin = scaleMin;
this.scaleMax = scaleMax;
this.scaleLog = scaleLog;
if (scaleMax != null && (scaleMin == null || scaleMax.floatValue() == scaleMin)) {
throw new IllegalArgumentException();
}
}
public float scaleValue(float value) {
if (scaleLog && value > 0) {
value = (float) Math.log10(value);
}
if (scaleMax == null) {
return value;
} else if (dataMax.floatValue() == dataMin) {
return scaleMax;
} else {
return ((scaleMax - scaleMin) * (value - dataMin) / (dataMax - dataMin)) + scaleMin;
}
}
public void prepareScale(float value) {
if (scaleLog && value > 0) {
value = (float) Math.log10(value);
}
if (scaleMax != null && dataMin != null) {
if (value < dataMin) {
dataMin = value;
}
if (value > dataMax) {
dataMax = value;
}
} else if (scaleMax != null) {
dataMin = value;
dataMax = value;
}
}
public boolean isScaleSet() {
return scaleMax != null;
}
public Float getScaleMin() {
return scaleMin;
}
public Float getScaleMax() {
return scaleMax;
}
}