/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.geometry.jts; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.MathTransform2D; import org.opengis.referencing.operation.TransformException; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.CoordinateSequenceFactory; import com.vividsolutions.jts.geom.DefaultCoordinateSequenceFactory; /** * This coordinate sequence transformer will take a Geometry and transform in a set * of curved lines that will be "flattened" in order to get back a set of straight segments. * The error in the transform is linked to the "flattening", the higher the flattening, * the bigger the error, but also, the lesser the number of points that will be used * to represent the resulting coordinate sequence. * * @todo Not yet implemented. * * * @source $URL$ */ public class PreciseCoordinateSequenceTransformer implements CoordinateSequenceTransformer { CoordinateSequenceFactory csFactory; double flatness; public PreciseCoordinateSequenceTransformer() { csFactory = DefaultCoordinateSequenceFactory.instance(); } /** * @see org.geotools.geometry.jts.CoordinateSequenceTransformer#transform(com.vividsolutions.jts.geom.CoordinateSequence, org.geotools.ct.MathTransform2D) */ public CoordinateSequence transform(CoordinateSequence cs, MathTransform transform) throws TransformException { // Coordinate[] scs = cs.toCoordinateArray(); // GeneralPath path = new GeneralPath(); // path.moveTo(scs[0].x, scs[0].y); // for (int i = 0; i < scs.length; i++) { // path.moveTo(scs[0].x, scs[0].y); // } // Shape transformed = transform.createTransformedShape(path); // PathIterator iterator = transformed.getPathIterator(new AffineTransform(), flatness); // ArrayList coords = new ArrayList(scs.length); // double[] point = new double[6]; // while(!iterator.isDone()) { // iterator.next(); // iterator.currentSegment(point); // coords.add(new Coordinate(point[0], point[1])); // } // return csFactory.create(coords); return null; } public double getFlatness() { return flatness; } public void setFlatness(double flatness) { this.flatness = flatness; } }