package com.revolsys.elevation.gridded;
import java.util.Arrays;
import com.revolsys.geometry.model.GeometryFactory;
public class DoubleArrayGriddedElevationModel extends AbstractGriddedElevationModel {
private static final double NULL_VALUE = Double.NaN;
private final double[] elevations;
public DoubleArrayGriddedElevationModel(final GeometryFactory geometryFactory, final double x,
final double y, final int gridWidth, final int gridHeight, final int gridCellSize) {
super(geometryFactory, x, y, gridWidth, gridHeight, gridCellSize);
this.elevations = new double[gridWidth * gridHeight];
}
@Override
public void clear() {
super.clear();
Arrays.fill(this.elevations, NULL_VALUE);
}
@Override
protected void expandZ() {
for (final double elevation : this.elevations) {
expandZ(elevation);
}
}
@Override
protected double getElevationDo(final int x, final int y, final int gridWidth) {
final int index = y * gridWidth + x;
final double elevation = this.elevations[index];
return elevation;
}
@Override
public DoubleArrayGriddedElevationModel newElevationModel(final GeometryFactory geometryFactory,
final double x, final double y, final int width, final int height, final int cellSize) {
return new DoubleArrayGriddedElevationModel(geometryFactory, x, y, width, height, cellSize);
}
@Override
public void setElevation(final int gridX, final int gridY, final double elevation) {
final int width = getGridWidth();
final int height = getGridHeight();
if (gridX >= 0 && gridX < width && gridY >= 0 && gridY < height) {
final int index = gridY * width + gridX;
if (Double.isFinite(elevation)) {
this.elevations[index] = elevation;
} else {
this.elevations[index] = NULL_VALUE;
}
clearCachedObjects();
}
}
@Override
public void setElevationNull(final int gridX, final int gridY) {
setElevation(gridX, gridY, NULL_VALUE);
}
}