cdm/src/main/java/ucar/unidata/geoloc/projection/proj4/PolyconicProjection.java
@Override
  public LatLonPoint projToLatLon(ProjectionPoint world, LatLonPointImpl result) {
    double fromX = (world.getX() - falseEasting) / totalScale; // assumes cartesian coords in km
    double fromY = (world.getY() - falseNorthing) / totalScale;

    ProjectionPointImpl pp = new ProjectionPointImpl();
    projectInverse(fromX, fromY, pp);
    if (pp.getX() < -Math.PI) {
      pp.setX(-Math.PI);
    } else if (pp.getX() > Math.PI) {
      pp.setX(Math.PI);
    }
    if (projectionLongitude != 0 && !Double.isNaN(pp.getX())) {
      pp.setX(MapMath.normalizeLongitude(pp.getX() + projectionLongitude));
    }

    result.setLatitude( Math.toDegrees(pp.getY()));
    result.setLongitude( Math.toDegrees(pp.getX()));
    return result;
  }
@Override
  public LatLonPoint projToLatLon(ProjectionPoint world, LatLonPointImpl result) {
    double fromX = (world.getX() - falseEasting) / totalScale; // assumes cartesian coords in km
    double fromY = (world.getY() - falseNorthing) / totalScale;

    ProjectionPointImpl pp = new ProjectionPointImpl();
    projectInverse(fromX, fromY, pp);
    if (pp.getX() < -Math.PI) {
      pp.setX(-Math.PI);
    } else if (pp.getX() > Math.PI) {
      pp.setX(Math.PI);
    }
    if (projectionLongitude != 0 && !Double.isNaN(pp.getX())) {
      pp.setX(MapMath.normalizeLongitude(pp.getX() + projectionLongitude));
    }

    result.setLatitude( Math.toDegrees(pp.getY()));
    result.setLongitude( Math.toDegrees(pp.getX()));
    return result;
  }
Convert projection coordinates to a LatLonPoint
Note: a new object is not created on each call for the return value.

@param world  convert from these projection coordinates
@param result the object to write to
@return LatLonPoint convert to these lat/lon coordinates