@Override public CoordinateReferenceSystem getCRS(final GeoPos referencePos, ParameterValueGroup parameters, GeodeticDatum datum) throws FactoryException { int zoneIndex = parameters.parameter(ZONE_NAME).intValue(); String hemisphere1 = parameters.parameter(HEMISPHERE_NAME).stringValue(); boolean south = (SOUTH_HEMISPHERE.equals(hemisphere1)); ParameterValueGroup tmParameters = createTransverseMercatorParameters(zoneIndex, south, datum); return createCrs(getProjectionName(zoneIndex, south), new TransverseMercator.Provider(), tmParameters, datum); }
@Override public CoordinateReferenceSystem getCRS(final GeoPos referencePos, ParameterValueGroup parameters, GeodeticDatum datum) throws FactoryException { int zoneIndex = parameters.parameter(ZONE_NAME).intValue(); String hemisphere1 = parameters.parameter(HEMISPHERE_NAME).stringValue(); boolean south = (SOUTH_HEMISPHERE.equals(hemisphere1)); ParameterValueGroup tmParameters = createTransverseMercatorParameters(zoneIndex, south, datum); return createCrs(getProjectionName(zoneIndex, south), new TransverseMercator.Provider(), tmParameters, datum); }
ParameterValueGroup createTransverseMercatorParameters(int zoneIndex, boolean south, GeodeticDatum datum) { ParameterDescriptorGroup tmParameters = new TransverseMercator.Provider().getParameters(); ParameterValueGroup tmValues = tmParameters.createValue(); setValue(tmValues, MapProjection.AbstractProvider.SEMI_MAJOR, datum.getEllipsoid().getSemiMajorAxis()); setValue(tmValues, MapProjection.AbstractProvider.SEMI_MINOR, datum.getEllipsoid().getSemiMinorAxis()); setValue(tmValues, MapProjection.AbstractProvider.LATITUDE_OF_ORIGIN, 0.0); setValue(tmValues, MapProjection.AbstractProvider.CENTRAL_MERIDIAN, getCentralMeridian(zoneIndex)); setValue(tmValues, MapProjection.AbstractProvider.SCALE_FACTOR, 0.9996); setValue(tmValues, MapProjection.AbstractProvider.FALSE_EASTING, 500000.0); setValue(tmValues, MapProjection.AbstractProvider.FALSE_NORTHING, south ? 10000000.0 : 0.0); return tmValues; }
@Override public CoordinateReferenceSystem getCRS(final GeoPos referencePos, ParameterValueGroup parameters, GeodeticDatum datum) throws FactoryException { int zoneIndex = getZoneIndex(referencePos.getLon()); final boolean south = referencePos.getLat() < 0.0; ParameterValueGroup tmParameters = createTransverseMercatorParameters(zoneIndex, south, datum); final String projName = getProjectionName(zoneIndex, south); return createCrs(projName, new TransverseMercator.Provider(), tmParameters, datum); } }
ParameterValueGroup createTransverseMercatorParameters(int zoneIndex, boolean south, GeodeticDatum datum) { ParameterDescriptorGroup tmParameters = new TransverseMercator.Provider().getParameters(); ParameterValueGroup tmValues = tmParameters.createValue(); setValue(tmValues, MapProjection.AbstractProvider.SEMI_MAJOR, datum.getEllipsoid().getSemiMajorAxis()); setValue(tmValues, MapProjection.AbstractProvider.SEMI_MINOR, datum.getEllipsoid().getSemiMinorAxis()); setValue(tmValues, MapProjection.AbstractProvider.LATITUDE_OF_ORIGIN, 0.0); setValue(tmValues, MapProjection.AbstractProvider.CENTRAL_MERIDIAN, getCentralMeridian(zoneIndex)); setValue(tmValues, MapProjection.AbstractProvider.SCALE_FACTOR, 0.9996); setValue(tmValues, MapProjection.AbstractProvider.FALSE_EASTING, 500000.0); setValue(tmValues, MapProjection.AbstractProvider.FALSE_NORTHING, south ? 10000000.0 : 0.0); return tmValues; }
@Override public CoordinateReferenceSystem getCRS(final GeoPos referencePos, ParameterValueGroup parameters, GeodeticDatum datum) throws FactoryException { int zoneIndex = getZoneIndex(referencePos.getLon()); final boolean south = referencePos.getLat() < 0.0; ParameterValueGroup tmParameters = createTransverseMercatorParameters(zoneIndex, south, datum); final String projName = getProjectionName(zoneIndex, south); return createCrs(projName, new TransverseMercator.Provider(), tmParameters, datum); } }