transform(source, destination) {
    /** @type {import("../proj/Projection.js").default} */
    const sourceProj = getProjection(source);
    const transformFn =
      sourceProj.getUnits() == 'tile-pixels'
        ? function (inCoordinates, outCoordinates, stride) {
            const pixelExtent = sourceProj.getExtent();
            const projectedExtent = sourceProj.getWorldExtent();
            const scale = getHeight(projectedExtent) / getHeight(pixelExtent);
            composeTransform(
              tmpTransform,
              projectedExtent[0],
              projectedExtent[3],
              scale,
              -scale,
              0,
              0,
              0,
            );
            const transformed = transform2D(
              inCoordinates,
              0,
              inCoordinates.length,
              stride,
              tmpTransform,
              outCoordinates,
            );
            const projTransform = getTransform(sourceProj, destination);
            if (projTransform) {
              return projTransform(transformed, transformed, stride);
            }
            return transformed;
          }
        : getTransform(sourceProj, destination);
    this.applyTransform(transformFn);
    return this;
  }
Transform each coordinate of the geometry from one coordinate reference
system to another. The geometry is modified in place.
For example, a line will be transformed to a line and a circle to a circle.
If you do not want the geometry modified in place, first `clone()` it and
then use this function on the clone.

@param {import("../proj.js").ProjectionLike} source The current projection.  Can be a
    string identifier or a {@link module:ol/proj/Projection~Projection} object.
@param {import("../proj.js").ProjectionLike} destination The desired projection.  Can be a
    string identifier or a {@link module:ol/proj/Projection~Projection} object.
@return {this} This geometry.  Note that original geometry is
    modified in place.
@api