package com.ximple.eofms.jobs; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.CoordinateSequenceFilter; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.util.Assert; import com.ximple.eofms.util.TWDDatumConverter; import com.ximple.io.dgn7.GeometryConverter; public class TWD97GeometryConverterDecorator implements GeometryConverter { private GeometryConverter converter; private TWD97ConvertFilter coordinatesFilter = new TWD97ConvertFilter(); public TWD97GeometryConverterDecorator() { } public GeometryConverter getConverter() { return converter; } public void setConverter(GeometryConverter converter) { this.converter = converter; } public Geometry toGeometry(GeometryFactory factory) { if (converter == null) Assert.shouldNeverReachHere(); coordinatesFilter.reset(); Geometry geom = converter.toGeometry(factory); if (geom == null) return null; geom.apply(coordinatesFilter); return geom; } class TWD97ConvertFilter implements CoordinateSequenceFilter { private boolean done = false; private boolean geometryChanged = false; public void filter(CoordinateSequence coordinateSequence, int i) { Coordinate pt = coordinateSequence.getCoordinateCopy(i); Coordinate pt97 = TWDDatumConverter.fromTM2ToTWD97(pt); pt.x = pt97.x; pt.y = pt97.y; pt.z = pt97.z; done = (i >= coordinateSequence.size()); geometryChanged = true; } public boolean isDone() { return done; } public boolean isGeometryChanged() { return geometryChanged; } public void reset() { done = false; geometryChanged = false; } } }