public GeographicToGeocentricConversion(GeographicCoordinateReferenceSystem sourceCRS) { primeMerid = sourceCRS.getPrimeMeridian().getLongitude(); semiMajorAxis = sourceCRS.getDatum().getEllipsoid().getSemiMajorAxis(); double invFlatt = sourceCRS.getDatum().getEllipsoid().getInverseFlattening(); double flatt = 1 / invFlatt; eccentricity2 = (2 - flatt) * flatt; epsilon = eccentricity2 / (1 - eccentricity2); semiMinorAxis = semiMajorAxis * (1 - flatt); }
/** * Returns the Position Vector transformation for the geographic 3D domain. * <p> * It first transforms from the source CRS to WGS84, and then from WGS84 to the target CRS. * <p> * This transformation uses EPSG method 1037 * * @return a Transformation conforming to EPSG method 1037 */ static public CoordinateOperation positionVectorTransformation3D(GeographicCoordinateReferenceSystem source, GeographicCoordinateReferenceSystem target) { CoordinateOperation datumTransformation = positionVectorTransformation(source.getDatum(), target.getDatum()); return new ConcatenatedOperation.Builder() .forward(new GeographicToGeocentricConversion(source)) .forward(datumTransformation) .reverse(new GeographicToGeocentricConversion(target)) .build(); }
/** * Returns the Position Vector transformation for the geographic 2D domain. * <p> * It first transforms from the source CRS to WGS84, and then from WGS84 to the target CRS. * <p> * This transformation uses EPSG method 9606 * * @return a Transformation conforming to EPSG method 9606 */ static public CoordinateOperation positionVectorTransformation2D(GeographicCoordinateReferenceSystem source, GeographicCoordinateReferenceSystem target) { CoordinateOperation datumTransformation = positionVectorTransformation(source.getDatum(), target.getDatum()); return new ConcatenatedOperation.Builder() .reverse(new Geographic3DTo2DConversion()) .forward(new GeographicToGeocentricConversion(source)) .forward(datumTransformation) .reverse(new GeographicToGeocentricConversion(target)) .forward(new Geographic3DTo2DConversion()) .build(); }