Author: aaime Date: 2012-04-12 06:56:48 -0700 (Thu, 12 Apr 2012) New Revision: 38661 Modified: trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/NTv2Transform.java trunk/modules/library/referencing/src/test/java/org/geotools/referencing/operation/transform/NTv2TransformTest.java Log: [GEOT-4101] NTv2Transform converting too many points & excessive logging Modified: trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/NTv2Transform.java =================================================================== --- trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/NTv2Transform.java 2012-04-12 13:43:06 UTC (rev 38660) +++ trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/NTv2Transform.java 2012-04-12 13:56:48 UTC (rev 38661) @@ -259,23 +259,25 @@ try { GridShift shift = new GridShift(); - for (int i=0; i<srcPts.length; i=i+2) { - shift.setLonPositiveEastDegrees(srcPts[i]); - shift.setLatDegrees(srcPts[i+1]); + while(--numPts >= 0) { + shift.setLonPositiveEastDegrees(srcPts[srcOff++]); + shift.setLatDegrees(srcPts[srcOff++]); if (forward) { shifted = gridShift.gridShiftForward(shift); } else { shifted = gridShift.gridShiftReverse(shift); } if (shifted) { - dstPts[i]=shift.getShiftedLonPositiveEastDegrees(); - dstPts[i+1]=shift.getShiftedLatDegrees(); + dstPts[dstOff++]=shift.getShiftedLonPositiveEastDegrees(); + dstPts[dstOff++]=shift.getShiftedLatDegrees(); } else { - LOGGER.log(Level.WARNING, "Point (" + srcPts[i] + ", " + srcPts[i+1] + - ") is not covered by '" + this.gridShift + "' NTv2 grid, " + - " it will not be shifted."); - dstPts[i]=srcPts[i]; - dstPts[i+1]=srcPts[i+1]; + if(LOGGER.isLoggable(Level.FINE)) { + LOGGER.log(Level.FINE, "Point (" + srcPts[srcOff-2] + ", " + srcPts[srcOff-1] + + ") is not covered by '" + this.grid + "' NTv2 grid," + + " it will not be shifted."); + } + dstPts[dstOff++]=srcPts[srcOff-2]; + dstPts[dstOff++]=srcPts[srcOff-1]; } } } catch (IOException e) { Modified: trunk/modules/library/referencing/src/test/java/org/geotools/referencing/operation/transform/NTv2TransformTest.java =================================================================== --- trunk/modules/library/referencing/src/test/java/org/geotools/referencing/operation/transform/NTv2TransformTest.java 2012-04-12 13:43:06 UTC (rev 38660) +++ trunk/modules/library/referencing/src/test/java/org/geotools/referencing/operation/transform/NTv2TransformTest.java 2012-04-12 13:56:48 UTC (rev 38661) @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import java.net.URI; +import java.util.Arrays; import org.junit.Before; import org.junit.Test; @@ -144,6 +145,21 @@ assertEquals(p[1], TEST_POINT_DST[1], TOLERANCE); } + @Test + public void testTransformTranslated() throws TransformException { + double[] src = new double[4]; + double[] dst = new double[4]; + src[2] = TEST_POINT_SRC[0]; + src[3] = TEST_POINT_SRC[1]; + + transform.transform(src, 2, dst, 2, 1); + assertEquals(0, dst[0], TOLERANCE); + assertEquals(0, dst[1], TOLERANCE); + assertEquals(dst[2], TEST_POINT_DST[0], TOLERANCE); + assertEquals(dst[3], TEST_POINT_DST[1], TOLERANCE); + } + + /** * Test method for {@link org.geotools.referencing.operation.transform.NTv2Transform#inverseTransform(double[], int, double[], int, int)}. * @throws TransformException @@ -157,6 +173,20 @@ } @Test + public void testInverseTransformTranslated() throws TransformException { + double[] src = new double[4]; + double[] dst = new double[4]; + src[2] = TEST_POINT_DST[0]; + src[3] = TEST_POINT_DST[1]; + + transform.inverseTransform(src, 2, dst, 2, 1); + assertEquals(0, dst[0], TOLERANCE); + assertEquals(0, dst[1], TOLERANCE); + assertEquals(dst[2], TEST_POINT_SRC[0], TOLERANCE); + assertEquals(dst[3], TEST_POINT_SRC[1], TOLERANCE); + } + + @Test public void testHashCodeEquals() throws Exception { NTv2Transform t2 = new NTv2Transform(new URI(TEST_GRID)); assertEquals(transform, t2); |