*/
private void parseCoordinateProjectionTransform(
final MapProjection projTransf, final String name,
GeoTiffIIOMetadataEncoder metadata) {
final ParameterValueGroup parameters = projTransf.getParameterValues();
// /////////////////////////////////////////////////////////////////////
//
// Transverse Mercator
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof TransverseMercator
&& name.equalsIgnoreCase("transverse_mercator")) {
// key 3075
metadata
.addGeoShortParam(
GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_TransverseMercator);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey, parameters
.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Mercator_1SP
// Mercator_2SP
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof Mercator
&& (name.equalsIgnoreCase("mercator_1SP") || name
.equalsIgnoreCase("Mercator_2SP"))) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_Mercator);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
List<GeneralParameterValue> values = parameters.values();
for (GeneralParameterValue value : values){
if (value instanceof ParameterValue){
ParameterValue<?> paramValue = (ParameterValue<?>) value;
if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "latitude_of_origin")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjNatOriginLatGeoKey,(paramValue).doubleValue());
}else if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "central_meridian")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjNatOriginLongGeoKey,(paramValue).doubleValue());
}else if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "scale_factor")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey,(paramValue).doubleValue());
}else if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "standard_parallel_1")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjStdParallel1GeoKey,(paramValue).doubleValue());
}else if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "false_easting")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjFalseEastingGeoKey,(paramValue).doubleValue());
}else if (AbstractIdentifiedObject.nameMatches(value.getDescriptor(), "false_northing")) {
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjFalseNorthingGeoKey,(paramValue).doubleValue());
}
}
}
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Lamber conformal 1sp
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof LambertConformal && name.indexOf("1") != -1) {
// key 3075
metadata
.addGeoShortParam(
GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_LambertConfConic_Helmert);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey, parameters
.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// LAMBERT_CONFORMAL_CONIC_2SP
// lambert_conformal_conic_2SP_Belgium
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof LambertConformal && name.indexOf("2") != -1) {
// key 3075
metadata
.addGeoShortParam(
GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_LambertConfConic_2SP);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjStdParallel1GeoKey,
parameters.parameter("standard_parallel_1").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjStdParallel2GeoKey,
parameters.parameter("standard_parallel_2").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// if (name.equalsIgnoreCase("equidistant_conic")
// || code == GeoTiffMetadata2CRSAdapter.CT_EquidistantConic) {
// parameters = mtFactory
// .getDefaultParameters("equidistant_conic");
// parameters.parameter("central_meridian").setValue(
// getOriginLong());
// parameters.parameter("latitude_of_origin").setValue(
// getOriginLat());
// parameters
// .parameter("standard_parallel_1")
// .setValue(
// this
// .getGeoKeyAsDouble(GeoTiffIIOMetadataDecoder.ProjStdParallel1GeoKey));
// parameters
// .parameter("standard_parallel_2")
// .setValue(
// this
// .getGeoKeyAsDouble(GeoTiffIIOMetadataDecoder.ProjStdParallel2GeoKey));
// parameters.parameter("false_easting").setValue(
// getFalseEasting());
// parameters.parameter("false_northing").setValue(
// getFalseNorthing());
//
// return parameters;
// }
// /////////////////////////////////////////////////////////////////////
//
// stereographic
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof Stereographic
&& name.equalsIgnoreCase("stereographic")) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_Stereographic);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey, parameters
.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// polar_stereographic
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof PolarStereographic
&& name.equalsIgnoreCase("polar_stereographic")) {
// key 3075
metadata
.addGeoShortParam(
GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_PolarStereographic);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjStraightVertPoleLongGeoKey, parameters
.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey, parameters
.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Oblique_Stereographic
//
// /////////////////////////////////////////////////////////////////////
if(projTransf instanceof ObliqueStereographic
&& name.equalsIgnoreCase("Oblique_Stereographic")) {
metadata.addGeoShortParam(
GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_ObliqueStereographic);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(
GeoTiffPCSCodes.ProjScaleAtNatOriginGeoKey, parameters
.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Oblique Mercator
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof ObliqueMercator
&& (name.equalsIgnoreCase("oblique_mercator") || name
.equalsIgnoreCase("hotine_oblique_mercator"))) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_ObliqueMercator);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLongGeoKey,
parameters.parameter("longitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLatGeoKey,
parameters.parameter("latitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjScaleAtCenterGeoKey,
parameters.parameter("scale_factor").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjAzimuthAngleGeoKey,
parameters.parameter("azimuth").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
// rectified grid angle???
return;
}
// /////////////////////////////////////////////////////////////////////
//
// albers_Conic_Equal_Area
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof AlbersEqualArea
&& name.equalsIgnoreCase("albers_Conic_Equal_Area")) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_AlbersEqualArea);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLongGeoKey,
parameters.parameter("longitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjNatOriginLatGeoKey,
parameters.parameter("latitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjStdParallel1GeoKey,
parameters.parameter("standard_parallel_1").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjStdParallel2GeoKey,
parameters.parameter("standard_parallel_2").doubleValue());
// rectified grid angle???
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Orthographic
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof Orthographic
&& name.equalsIgnoreCase("Orthographic")) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_Orthographic);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLongGeoKey,
parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLongGeoKey,
parameters.parameter("latitude_of_origin").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Lambert Azimuthal Equal Area
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof LambertAzimuthalEqualArea
&& name.equalsIgnoreCase("Lambert_Azimuthal_Equal_Area")) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,
GeoTiffCoordinateTransformationsCodes.CT_LambertAzimEqualArea);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLatGeoKey,
parameters.parameter("latitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLongGeoKey,
parameters.parameter("longitude_of_center").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,
parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,
parameters.parameter("false_northing").doubleValue());
return;
}
// /////////////////////////////////////////////////////////////////////
//
// Van der Grinten
//
// /////////////////////////////////////////////////////////////////////
if (projTransf instanceof WorldVanDerGrintenI
&& name.equalsIgnoreCase("World_Van_der_Grinten_I")) {
// key 3075
metadata.addGeoShortParam(GeoTiffPCSCodes.ProjCoordTransGeoKey,GeoTiffCoordinateTransformationsCodes.CT_VanDerGrinten);
// metadata.addGeoAscii(GeoTiffPCSCodes.PCSCitationGeoKey, name);
// params
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjCenterLongGeoKey,parameters.parameter("central_meridian").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseEastingGeoKey,parameters.parameter("false_easting").doubleValue());
metadata.addGeoDoubleParam(GeoTiffPCSCodes.ProjFalseNorthingGeoKey,parameters.parameter("false_northing").doubleValue());
return;
}
// we did not support this one
throw new IllegalArgumentException("Unable to map projection"+projTransf.getName());