/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.rasterservice.georeferencing; /*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.util.AffineTransformation; import com.vividsolutions.jts.geom.util.AffineTransformationBuilder; import java.awt.Point; import java.util.ArrayList; import java.util.List; /** * cismet GmbH, Saarbruecken, Germany. * * <p>... and it just works.**************************************************</p> * * @version $Revision$, $Date$ */ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * DOCUMENT ME! * * @author jruiz * @version $Revision$, $Date$ */ public class TestTransformation { //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param args DOCUMENT ME! */ public static void main(final String[] args) { // final List<Point2D> srcPoints = new ArrayList<>(); // srcPoints.add(new Point2D.Double(88, 372)); // srcPoints.add(new Point2D.Double(340, 446)); // srcPoints.add(new Point2D.Double(771, 562)); // srcPoints.add(new Point2D.Double(98, 822)); // srcPoints.add(new Point2D.Double(982, 147)); // final Point2D[] src = srcPoints.toArray(new Point2D[0]); // // final List<Point2D> dstPoints = new ArrayList<>(); // dstPoints.add(new Point2D.Double(374334, 5681815)); // dstPoints.add(new Point2D.Double(374368, 5681790)); // dstPoints.add(new Point2D.Double(374425, 5681749)); // dstPoints.add(new Point2D.Double(374344, 5681744)); // dstPoints.add(new Point2D.Double(374444, 5681803)); // final Point2D[] dst = dstPoints.toArray(new Point2D[0]); // // final WarpTransform2D wt = new WarpTransform2D(src, dst, 1); //// System.out.println(new Point2D.Double(91, 373) + " => " + wt.transform(new Point2D.Double(91, 373), null)); // for (final Point2D srcPoint : srcPoints) { // System.out.println(srcPoint + " => " + wt.transform(srcPoint, null)); // } // } final long a = System.currentTimeMillis(); final List<PointCoordinatePair> pairs = new ArrayList<PointCoordinatePair>(); for (int i = 0; i < 5; i++) { final PointCoordinatePair pair = new PointCoordinatePair( new Point(i, i), new Coordinate(i + 5, i + 5)); pairs.add(pair); } final List<AffineTransformation> transforms = new ArrayList<>(); for (final Object[] arr : RasterGeoReferencingHandler.getCombinations(pairs.toArray(), 3)) { final PointCoordinatePair pair0 = (PointCoordinatePair)arr[0]; final PointCoordinatePair pair1 = (PointCoordinatePair)arr[1]; final PointCoordinatePair pair2 = (PointCoordinatePair)arr[2]; final AffineTransformationBuilder builder = new AffineTransformationBuilder( new Coordinate(pair0.getPoint().getX(), pair0.getPoint().getY()), new Coordinate(pair1.getPoint().getX(), pair1.getPoint().getY()), new Coordinate(pair2.getPoint().getX(), pair2.getPoint().getY()), pair0.getCoordinate(), pair1.getCoordinate(), pair2.getCoordinate()); final AffineTransformation transform = builder.getTransformation(); if (transform != null) { transforms.add(transform); } // System.out.println(Arrays.toString(arr)); } final AffineTransformation transform = RasterGeoReferencingHandler.createAverageTransformation(transforms); System.out.println(transform); int r = 0; for (final PointCoordinatePair pair : pairs) { final Coordinate src = new Coordinate(pair.getPoint().getX(), pair.getPoint().getY()); final Coordinate dst = transform.transform(src, new Coordinate()); System.out.println(r++ + ": " + dst.distance(src)); } final long b = System.currentTimeMillis(); System.out.println(transforms.size() + ": " + (b - a)); } }