static _computeTextureTranslationAndScale(
    imageryLayer,
    nonNativeBoundingRectangle,
    nonNativeImageryRectangle,
  ) {
    //>>includeStart('debug', pragmas.debug);
    Check.defined("imageryLayer", imageryLayer);
    Check.defined("nonNativeBoundingRectangle", nonNativeBoundingRectangle);
    Check.defined("nonNativeImageryRectangle", nonNativeImageryRectangle);
    //>>includeEnd('debug');

    const tilingScheme = imageryLayer.imageryProvider.tilingScheme;

    const nativeBoundingRectangle = tilingScheme.rectangleToNativeRectangle(
      nonNativeBoundingRectangle,
      nativeBoundingRectangleScratch,
    );
    const nativeImageryRectangle = tilingScheme.rectangleToNativeRectangle(
      nonNativeImageryRectangle,
      nativeImageryRectangleScratch,
    );

    const translationAndScale =
      ImageryPipelineStage._computeTextureTranslationAndScaleFromNative(
        nativeBoundingRectangle,
        nativeImageryRectangle,
      );
    return translationAndScale;
  }
Compute the translation and scale that has to be applied to
the texture coordinates for mapping the given imagery to
the geometry.

The given rectangles will be converted into their "native" representation,
using the tiling scheme of the given imagery layer, and passed
to `_computeTextureTranslationAndScaleFromNative` (see that for details).

@param {ImageryLayer} imageryLayer The imagery layer
@param {Rectangle} nonNativeBoundingRectangle The bounding
rectangle of the geometry
@param {Rectangle} nonNativeImageryRectangle The bounding
rectangle of the imagery
@returns {Cartesian4} The translation and scale
@private