/** * Creates the inverse CoordinateOperation. */ @Override public CoordinateOperation inverse() throws NonInvertibleOperationException { return new UnitConversion(targetUnits, sourceUnits); }
/** * @return * @see GeodeticCRS#toGeographicCoordinateConverter() */ @Override public CoordinateOperation toGeographicCoordinateConverter() { List<CoordinateOperation> ops = new ArrayList<CoordinateOperation>(); for (int i = 0; i < 2; i++) { if (getCoordinateSystem().getAxis(i).getDirection() == SOUTH || getCoordinateSystem().getAxis(i).getDirection() == WEST) { ops.add(new OppositeCoordinate(i)); } } // Convert from source unit to radians ops.add(UnitConversion.createUnitConverter(getCoordinateSystem().getUnit(0), RADIAN)); // switch from LON/LAT to LAT/LON coordinate if necessary if (getCoordinateSystem().getAxis(0).getDirection() == EAST || getCoordinateSystem().getAxis(0).getDirection() == WEST) { ops.add(CoordinateSwitch.SWITCH_LAT_LON); } // Add a third value to transform the geographic2D coord into a // geographic3D coord ops.add(ChangeCoordinateDimension.TO3D); return new CoordinateOperationSequence(new Identifier( CoordinateOperationSequence.class), ops); }
coordi = RAD2DD.transform(coordi);
/** * @return * @see GeodeticCRS#fromGeographicCoordinateConverter() */ @Override public CoordinateOperation fromGeographicCoordinateConverter() { List<CoordinateOperation> ops = new ArrayList<CoordinateOperation>(); // Remove the third value to transform the geographic3D coord into a // geographic2D coord ops.add(ChangeCoordinateDimension.TO2D); // switch from LON/LAT to LAT/LON coordinate if necessary if (getCoordinateSystem().getAxis(0).getDirection() == EAST || getCoordinateSystem().getAxis(0).getDirection() == WEST) { ops.add(CoordinateSwitch.SWITCH_LAT_LON); } // Convert from radian to this coordinate system's units ops.add(UnitConversion.createUnitConverter(RADIAN, getCoordinateSystem().getUnit(0))); for (int i = 0; i < 2; i++) { if (getCoordinateSystem().getAxis(i).getDirection() == SOUTH || getCoordinateSystem().getAxis(i).getDirection() == WEST) { ops.add(new OppositeCoordinate(i)); } } return new CoordinateOperationSequence(new Identifier( CoordinateOperationSequence.class), ops); }
@Override public double[] transform(double[] coord) throws IllegalCoordinateException { // Creates a temp coord to find the final translation parameters double[] coordi = coord.clone(); // Find a rough position on GRS 80 coordi = GEOC2GEOG.transform(coordi); // Get decimal degree coordinates for grid interpolation coordi = RAD2DD.transform(coordi); // Definitive translation parameters are initialized with mean // translation parameters double tx = -168.0; double ty = -60.0; double tz = 320.0; // Get the definitive translation parameters from the grids try { double[] t = GRID3D.bilinearInterpolation(coordi[0], coordi[1]); tx = t[0]; ty = t[1]; tz = t[2]; } catch (OutOfExtentException e) { throw new IllegalCoordinateException(e.getMessage()); } // Apply definitive translation coord[0] = -tx + coord[0]; coord[1] = -ty + coord[1]; coord[2] = -tz + coord[2]; return coord; }
/** * @return * @see GeodeticCRS#fromGeographicCoordinateConverter() */ @Override public CoordinateOperation fromGeographicCoordinateConverter() { List<CoordinateOperation> ops = new ArrayList<CoordinateOperation>(); // Remove the third value to transform the geographic3D coord into a // geographic2D coord ops.add(ChangeCoordinateDimension.TO2D); // Projection ops.add(projection); // switch easting/northing coordinate if necessary if (getCoordinateSystem().getAxis(0).getDirection() == NORTH || getCoordinateSystem().getAxis(0).getDirection() == SOUTH) { ops.add(CoordinateSwitch.SWITCH_LAT_LON); } // Unit conversion if (getCoordinateSystem().getUnit(0) != METER) { ops.add(UnitConversion.createUnitConverter(METER, getCoordinateSystem().getUnit(0))); } for (int i = 0; i < 2; i++) { if (getCoordinateSystem().getAxis(i).getDirection() == SOUTH || getCoordinateSystem().getAxis(i).getDirection() == WEST) { ops.add(new OppositeCoordinate(i)); } } return new CoordinateOperationSequence(new Identifier( CoordinateOperationSequence.class), ops); }
+Arrays.toString(new Unit[]{targetUnit, targetUnit, targetUnit}); if (unitConverters.containsKey(key)) return unitConverters.get(key); UnitConversion converter = new UnitConversion(identifier, new Unit[]{sourceUnit, sourceUnit, sourceUnit}, new Unit[]{targetUnit, targetUnit, targetUnit}); +Arrays.toString(new Unit[]{targetUnit, targetUnit, Unit.METER}); if (unitConverters.containsKey(key)) return unitConverters.get(key); UnitConversion converter = new UnitConversion(identifier, new Unit[]{sourceUnit, sourceUnit, Unit.METER}, new Unit[]{targetUnit, targetUnit, Unit.METER});
ops.add(UnitConversion.createUnitConverter(getCoordinateSystem().getUnit(0), METER));
+Arrays.toString(new Unit[]{planiTargetUnit, planiTargetUnit, altiTargetUnit}); if (unitConverters.containsKey(key)) return unitConverters.get(key); UnitConversion converter = new UnitConversion(identifier, new Unit[]{planiSourceUnit, planiSourceUnit, altiSourceUnit}, new Unit[]{planiTargetUnit, planiTargetUnit, altiTargetUnit});
/** * @return * @see GeodeticCRS#fromGeographicCoordinateConverter() */ @Override public CoordinateOperation fromGeographicCoordinateConverter() { List<CoordinateOperation> ops = new ArrayList<CoordinateOperation>(); // switch from LON/LAT to LAT/LON coordinate if necessary if (getCoordinateSystem().getAxis(0).getDirection() == EAST || getCoordinateSystem().getAxis(0).getDirection() == WEST) { ops.add(CoordinateSwitch.SWITCH_LAT_LON); } // Convert from radian to this coordinate system's units ops.add(UnitConversion.createUnitConverter(RADIAN, getCoordinateSystem().getUnit(0), METER, getCoordinateSystem().getUnit(2))); for (int i = 0; i < 3; i++) { if (getCoordinateSystem().getAxis(i).getDirection() == SOUTH || getCoordinateSystem().getAxis(i).getDirection() == WEST || getCoordinateSystem().getAxis(i).getDirection() == DOWN) { ops.add(new OppositeCoordinate(i)); } } return new CoordinateOperationSequence(new Identifier( CoordinateOperationSequence.class), ops); }
/** * @return * @see GeodeticCRS#toGeographicCoordinateConverter() */ @Override public CoordinateOperation toGeographicCoordinateConverter() { List<CoordinateOperation> ops = new ArrayList<CoordinateOperation>(); for (int i = 0; i < 3; i++) { if (getCoordinateSystem().getAxis(i).getDirection() == SOUTH || getCoordinateSystem().getAxis(i).getDirection() == WEST || getCoordinateSystem().getAxis(i).getDirection() == DOWN) { ops.add(new OppositeCoordinate(i)); } } // Convert from source unit to radians ops.add(UnitConversion.createUnitConverter(getCoordinateSystem().getUnit(0), RADIAN, getCoordinateSystem().getUnit(2), METER)); // switch from LON/LAT to LAT/LON coordinate if necessary if (getCoordinateSystem().getAxis(0).getDirection() == EAST || getCoordinateSystem().getAxis(0).getDirection() == WEST) { ops.add(CoordinateSwitch.SWITCH_LAT_LON); } return new CoordinateOperationSequence(new Identifier( CoordinateOperationSequence.class), ops); }
ops.add(UnitConversion.createUnitConverter(getCoordinateSystem().getUnit(0), Unit.RADIAN, getCoordinateSystem().getUnit(2), Unit.METER)); ops.add(UnitConversion.createUnitConverter(getCoordinateSystem().getUnit(0), Unit.METER, getCoordinateSystem().getUnit(2), Unit.METER)); ops = cleverAdd(ops, UnitConversion.createUnitConverter(Unit.RADIAN, Unit.DEGREE, Unit.METER, Unit.METER)); ops.add(z_transfo); ops.add(UnitConversion.createUnitConverter(Unit.DEGREE, Unit.RADIAN, Unit.METER, Unit.METER)); ops.add(UnitConversion.createUnitConverter(Unit.RADIAN, Unit.DEGREE, Unit.METER, Unit.METER)); ops.add(UnitConversion.createUnitConverter(Unit.DEGREE, Unit.RADIAN, Unit.METER, Unit.METER)); ops.add(h_op.inverse()); new CoordinateSwitch(4, 5), // X', Y', Z, X, Y, Z' h_op, UnitConversion.createUnitConverter(Unit.RADIAN, Unit.DEGREE, Unit.METER, Unit.METER), LoadMemorizeCoordinate.loadZ, MemorizeCoordinate.memoZ, z_transfo, UnitConversion.createUnitConverter(Unit.DEGREE, Unit.RADIAN, Unit.METER, Unit.METER),
ops.add(UnitConversion.createUnitConverter(Unit.RADIAN, Unit.DEGREE, Unit.METER, Unit.METER)); ops.add(UnitConversion.createUnitConverter(Unit.RADIAN, Unit.DEGREE, Unit.METER, Unit.METER)); ops = cleverAdd(ops, UnitConversion.createUnitConverter(Unit.RADIAN, getCoordinateSystem().getUnit(0), Unit.METER, getCoordinateSystem().getUnit(2))); ops = cleverAdd(ops, UnitConversion.createUnitConverter(Unit.METER, getCoordinateSystem().getUnit(0), Unit.METER, getCoordinateSystem().getUnit(2)));