@classmethod
def HeterogeneousLambertian(cls, radius, ro_target, ro_env):
    """Provides parameterisation for heterogeneous Lambertian (ie. uniform BRDF) surfaces.

        These surfaces are modelled in 6S as a circular target surrounded by an environment of a different reflectance.

        Arguments:

        * ``radius`` -- The radius of the target (in km)
        * ``ro_target`` -- The reflectance of the target
        * ``ro_env`` -- The reflectance of the environment

        Both of the reflectances can be set to any of the following:

        - A single float value (for example, 0.634), in which case it is interpreted as a spectrally-constant reflectance value.
        - A constant defined by this class (one of ``GroundReflectance.GreenVegetation``, ``GroundReflectance.ClearWater``, ``GroundReflectance.Sand`` or ``GroundReflectance.LakeWater``) in which case a built-in spectrum of the specified material is used.
        - An array of values (for example, [0.67, 0.85, 0.34, 0.65]) in which case the values are taken to be reflectances across the whole wavelength range at a spacing of 2.5nm. In this case, if the start wavelength is s and the end wavelength is e, the values must be given for the wavelengths: ``s, s+2.5, s+5.0, s+7.5, ..., e-2.5, e``
        - A multidimensional ndarray giving wavelength (column 0) and reflectance (column 1) values
        """
    ro_target_type, ro_target_values = cls._GetTargetTypeAndValues(ro_target)
    ro_env_type, ro_env_values = cls._GetTargetTypeAndValues(ro_env,
        'REFL_REPLACE_2')
    if ro_target_values == '' and ro_env_values == '':
        s = '1 (Non homogeneous surface)\n%s %s %f (ro1 ro2 radius)\n' % (
            ro_target_type, ro_env_type, radius)
    else:
        s = (
            '1 (Non homogeneous surface)\n%s %s %f (ro1 ro2 radius)\n%s\n%s\n'
             % (ro_target_type, ro_env_type, radius, ro_target_values,
            ro_env_values))
    return [s, ro_target, ro_env]
