package com.revolsys.elevation.gridded;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.io.BaseCloseable;
public abstract class DirectFileElevationModel extends AbstractGriddedElevationModel
implements BaseCloseable {
protected final int elevationByteCount;
protected final int headerSize;
private boolean open = true;
public DirectFileElevationModel(final GeometryFactory geometryFactory, final double minX,
final double minY, final int gridWidth, final int gridHeight, final int gridCellSize,
final int headerSize, final int elevationByteCount) {
super(geometryFactory, minX, minY, gridWidth, gridHeight, gridCellSize);
this.headerSize = headerSize;
this.elevationByteCount = elevationByteCount;
}
public DirectFileElevationModel(final int headerSize, final int elevationByteCount) {
this.headerSize = headerSize;
this.elevationByteCount = elevationByteCount;
}
@Override
public void clear() {
}
@Override
public void close() {
this.open = false;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
close();
}
@Override
protected double getElevationDo(final int gridX, final int gridY, final int gridWidth) {
final int offset = this.headerSize + (gridY * gridWidth + gridX) * this.elevationByteCount;
return readElevation(offset);
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean isNull(final int x, final int y) {
return false;
}
public boolean isOpen() {
return this.open;
}
@Override
public GriddedElevationModel newElevationModel(final GeometryFactory geometryFactory,
final double x, final double y, final int width, final int height, final int gridCellSize) {
// TODO Auto-generated method stub
return null;
}
protected abstract double readElevation(final int offset);
@Override
public void setElevation(final int gridX, final int gridY, final double elevation) {
final int gridWidth = getGridWidth();
final int offset = this.headerSize + (gridY * gridWidth + gridX) * this.elevationByteCount;
writeElevation(offset, elevation);
}
protected abstract void writeElevation(int offset, double elevation);
}