package com.revolsys.geometry.cs.projection; public class InverseOperation implements CoordinatesOperation { private final CoordinatesProjection projection; public InverseOperation(final CoordinatesProjection projection) { this.projection = projection; } @Override public void perform(final int sourceAxisCount, final double[] sourceCoordinates, final int targetAxisCount, final double[] targetCoordinates) { final CoordinatesProjection projection = this.projection; final int sourceLength = sourceCoordinates.length; int targetOffset = 0; for (int sourceOffset = 0; sourceOffset < sourceLength; sourceOffset += sourceAxisCount) { final double x = sourceCoordinates[sourceOffset]; final double y = sourceCoordinates[sourceOffset + 1]; projection.inverse(x, y, targetCoordinates, targetOffset); for (int axisIndex = 2; axisIndex < targetAxisCount; axisIndex++) { double value; if (axisIndex < sourceAxisCount) { value = sourceCoordinates[sourceOffset + axisIndex]; } else { value = Double.NaN; } targetCoordinates[targetOffset + axisIndex] = value; } targetOffset += targetAxisCount; } } @Override public String toString() { return this.projection + " -> geographics"; } }