package nl.ipo.cds.etl.generalization; import java.util.List; import java.util.concurrent.BlockingQueue; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier; public class DefaultGeneralizer implements Generalizer { private final static int DISTANCE = 30; private static final Log logger = LogFactory.getLog(DefaultGeneralizer.class); private GeometryFactory geometryFactory; private BlockingQueue<Event> eventQueue; private List<Geometry> geometries; private String[] columnValues; public DefaultGeneralizer() { geometryFactory = new GeometryFactory(); } @Override public void setGeometries(List<Geometry> geometries) { this.geometries = geometries; } @Override public void setEventQueue(BlockingQueue<Event> eventQueue) { this.eventQueue = eventQueue; } @Override public void setColumnValues(String[] columnValues) { this.columnValues = columnValues; } @Override public void run() { logger.debug("starting"); Geometry[] geometriesArray = new Geometry[geometries.size()]; for(int i = 0; i < geometriesArray.length; i++) { Geometry geometry = geometries.get(i); geometriesArray[i] = geometry.buffer(DISTANCE); } GeometryCollection collection = geometryFactory.createGeometryCollection(geometriesArray); Geometry union = TopologyPreservingSimplifier.simplify(collection.union(), DISTANCE); logger.debug("geometry offered"); try { eventQueue.put(new GeometryResult(union, columnValues)); } catch(InterruptedException e) { logger.debug(e); } logger.debug("finished"); } }