Class EqualArea

  • All Implemented Interfaces:
    Serializable, MathTransform, MathTransform2D

    public class EqualArea
    extends MapProjection
    Equal Earth is a projection inspired by the Robinson projection, but unlike the Robinson projection retains the relative size of areas.

    The projection was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.

    Publication: Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map projection, International Journal of Geographical Information Science, DOI: 10.1080/13658816.2018.1504949

    See Also:
    Serialized Form
    • Method Detail

      • inverseTransformNormalized

        protected Point2D inverseTransformNormalized​(double x,
                                                     double y,
                                                     Point2D ptDst)
                                              throws ProjectionException
        Description copied from class: MapProjection
        Transforms the specified coordinate and stores the result in ptDst. This method returns longitude as x values in the range [-PI..PI] and latitude as y values in the range [-PI/2..PI/2]. It will be checked by the caller, so this method doesn't need to performs this check.

        Input coordinates have the MapProjection.falseEasting and MapProjection.falseNorthing removed and are divided by MapProjection.globalScale before this method is invoked. After this method is invoked, the MapProjection.centralMeridian is added to the x results in ptDst. This means that projections that implement this method are performed on an ellipse (or sphere) with a semi-major axis of 1.

        In PROJ.4, the same standardization, described above, is handled by pj_inv.c. Therefore when porting projections from PROJ.4, the inverse transform equations can be used directly here with minimal change. In the equations of Snyder, MapProjection.falseEasting, MapProjection.falseNorthing and MapProjection.scaleFactor are usually not given. When implementing these equations here, you will not need to add the MapProjection.centralMeridian to the output longitude or remove the MapProjection.semiMajor (a or R).

        Specified by:
        inverseTransformNormalized in class MapProjection
        Parameters:
        x - The easting of the coordinate, linear distance on a unit sphere or ellipse.
        y - The northing of the coordinate, linear distance on a unit sphere or ellipse.
        ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in radians.
        Returns:
        the coordinate point after transforming x, y and storing the result in ptDst.
        Throws:
        ProjectionException - if the point can't be transformed.
      • transformNormalized

        protected Point2D transformNormalized​(double lpLambda,
                                              double lpPhi,
                                              Point2D ptDst)
                                       throws ProjectionException
        Description copied from class: MapProjection
        Transforms the specified coordinate and stores the result in ptDst. This method is usually (but not guaranteed) to be invoked with values of x in the range [-PI..PI] and values of y in the range [-PI/2..PI/2]. Values outside those ranges are accepted (sometime with a warning logged) on the assumption that most implementations use those values only in trigonometric functions like sin and cos.

        Coordinates have the MapProjection.centralMeridian removed from lambda before this method is invoked. After this method is invoked, the results in ptDst are multiplied by MapProjection.globalScale, and the MapProjection.falseEasting and MapProjection.falseNorthing are added. This means that projections that implement this method are performed on an ellipse (or sphere) with a semi-major axis of 1.

        In PROJ.4, the same standardization, described above, is handled by pj_fwd.c. Therefore when porting projections from PROJ.4, the forward transform equations can be used directly here with minimal change. In the equations of Snyder, MapProjection.falseEasting, MapProjection.falseNorthing and MapProjection.scaleFactor are usually not given. When implementing these equations here, you will not need to remove the MapProjection.centralMeridian from lambda or apply the MapProjection.semiMajor (a or R).

        Specified by:
        transformNormalized in class MapProjection
        Parameters:
        lpLambda - The longitude of the coordinate, in radians.
        lpPhi - The latitude of the coordinate, in radians.
        ptDst - the specified coordinate point that stores the result of transforming ptSrc, or null. Ordinates will be in a dimensionless unit, as a linear distance on a unit sphere or ellipse.
        Returns:
        the coordinate point after transforming (lambda, phi) and storing the result in ptDst.
        Throws:
        ProjectionException - if the point can't be transformed.