package mil.nga.giat.geowave.analytic; import java.nio.ByteBuffer; import mil.nga.giat.geowave.core.index.Persistable; /** * * Extracted numeric dimension values associated with an item or a sum of * dimension values from multiple items. * */ public class GeoObjectDimensionValues implements Persistable { public double x = 0.0; public double y = 0.0; public double z = 0.0; public double[] values = new double[0]; public double distance = 0.0; public long count = 0; public GeoObjectDimensionValues( final int extraValuesCount ) { values = new double[extraValuesCount]; } public GeoObjectDimensionValues() {} public GeoObjectDimensionValues( final double x, final double y, final double z, final double[] extraDimensions, final double distance ) { super(); this.x = x; this.y = y; this.z = z; values = extraDimensions; this.distance = distance; this.count = 1; } public void add( final GeoObjectDimensionValues association ) { x += association.x; y += association.y; z += association.z; for (int i = 0; i < values.length; i++) { values[i] += association.values[i]; } distance += association.distance; count += association.count; } public void set( final double x, final double y, final double z, final double[] extraDimensions, final double distance ) { this.x = x; this.y = y; this.z = z; values = extraDimensions; this.distance = distance; count = 1; } public long getCount() { return count; } public void setCount( final long count ) { this.count = count; } public double getX() { return x; } public void setX( final double x ) { this.x = x; } public double getY() { return y; } public void setY( final double y ) { this.y = y; } public double getZ() { return z; } public void setZ( final double z ) { this.z = z; } public double getDistance() { return distance; } public void setDistance( final double distance ) { this.distance = distance; } @Override public byte[] toBinary() { final ByteBuffer b = ByteBuffer.allocate(((4 + values.length) * 8) + 4 + 8); b.putLong(count); b.putDouble(x); b.putDouble(y); b.putDouble(z); b.putDouble(distance); b.putInt(values.length); for (final double value : values) { b.putDouble(value); } return b.array(); } @Override public void fromBinary( byte[] bytes ) { final ByteBuffer b = ByteBuffer.wrap(bytes); count = b.getLong(); x = b.getDouble(); y = b.getDouble(); z = b.getDouble(); distance = b.getDouble(); int i = b.getInt(); values = new double[i]; for (; i > 0; i--) { values[i - 1] = b.getDouble(); } } }