package com.revolsys.geometry.test.old.operation;
import java.util.Collection;
import com.revolsys.geometry.algorithm.match.AreaSimilarityMeasure;
import com.revolsys.geometry.algorithm.match.HausdorffSimilarityMeasure;
import com.revolsys.geometry.algorithm.match.SimilarityMeasureCombiner;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.Polygon;
import com.revolsys.geometry.operation.union.CascadedPolygonUnion;
/**
* Compares the results of CascadedPolygonUnion to Geometry.union()
* using shape similarity measures.
*
* @author mbdavis
*
*/
public class CascadedPolygonUnionTester {
public static final double MIN_SIMILARITY_MEAURE = 0.999999;
GeometryFactory geometryFactoryFloating = GeometryFactory.DEFAULT_3D;
public CascadedPolygonUnionTester() {
}
public boolean test(final Collection<? extends Polygon> polygons, final double minimumMeasure) {
final Geometry union1 = unionIterated(polygons);
final Geometry union2 = unionCascaded(polygons);
final double areaMeasure = new AreaSimilarityMeasure().measure(union1, union2);
final double hausMeasure = new HausdorffSimilarityMeasure().measure(union1, union2);
final double overallMeasure = SimilarityMeasureCombiner.combine(areaMeasure, hausMeasure);
return overallMeasure > minimumMeasure;
}
public Geometry unionCascaded(final Collection<? extends Polygon> polygons) {
return CascadedPolygonUnion.union(polygons);
}
public Geometry unionIterated(final Collection<? extends Polygon> polygons) {
Geometry unionAll = null;
int count = 0;
for (final Polygon polygon : polygons) {
if (unionAll == null) {
unionAll = polygon.clone();
} else {
unionAll = unionAll.union(polygon);
}
count++;
if (count % 100 == 0) {
System.out.print(".");
}
}
return unionAll;
}
}