package com.ximple.eofms.jobs;
|
|
import com.vividsolutions.jts.geom.Geometry;
|
import com.vividsolutions.jts.geom.GeometryFactory;
|
import com.vividsolutions.jts.geom.CoordinateSequenceFilter;
|
import com.vividsolutions.jts.geom.CoordinateSequence;
|
import com.vividsolutions.jts.geom.Coordinate;
|
import com.vividsolutions.jts.util.Assert;
|
|
import com.ximple.io.dgn7.GeometryConverter;
|
import com.ximple.eofms.util.TWDDatumConverter;
|
|
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);
|
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;
|
}
|
}
|
}
|