package mil.nga.giat.geowave.analytic.distance;
import org.opengis.feature.simple.SimpleFeature;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
/**
* Calculate distance between two SimpleFeatures, assuming has a Geometry.
*
* @see org.opengis.feature.simple.SimpleFeature
*
*/
public class FeatureCentroidDistanceFn implements
DistanceFn<SimpleFeature>
{
/**
*
*/
private static final long serialVersionUID = 3824608959408031752L;
private DistanceFn<Coordinate> coordinateDistanceFunction = new CoordinateEuclideanDistanceFn();
public FeatureCentroidDistanceFn() {}
public FeatureCentroidDistanceFn(
final DistanceFn<Coordinate> coordinateDistanceFunction ) {
super();
this.coordinateDistanceFunction = coordinateDistanceFunction;
}
public DistanceFn<Coordinate> getCoordinateDistanceFunction() {
return coordinateDistanceFunction;
}
public void setCoordinateDistanceFunction(
final DistanceFn<Coordinate> coordinateDistanceFunction ) {
this.coordinateDistanceFunction = coordinateDistanceFunction;
}
private Geometry getGeometry(
SimpleFeature x ) {
for (Object attr : x.getAttributes())
if (attr instanceof Geometry) return (Geometry) attr;
return (Geometry) x.getDefaultGeometry();
}
@Override
public double measure(
final SimpleFeature x,
final SimpleFeature y ) {
return coordinateDistanceFunction.measure(
getGeometry(
x).getCentroid().getCoordinate(),
getGeometry(
y).getCentroid().getCoordinate());
}
}