getFeatureInfoUrl(coordinate, resolution, projection, params) {
    const projectionObj = getProjection(projection);
    const sourceProjectionObj = this.getProjection();

    if (sourceProjectionObj && sourceProjectionObj !== projectionObj) {
      resolution = calculateSourceResolution(
        sourceProjectionObj,
        projectionObj,
        coordinate,
        resolution,
      );
      coordinate = transform(coordinate, projectionObj, sourceProjectionObj);
    }

    const options = {
      url: this.url_,
      params: {
        ...this.params_,
        ...params,
      },
      projection: sourceProjectionObj || projectionObj,
    };
    return getFeatureInfoUrl(options, coordinate, resolution);
  }
Return the GetFeatureInfo URL for the passed coordinate, resolution, and
projection. Return `undefined` if the GetFeatureInfo URL cannot be
constructed.
@param {import("../coordinate.js").Coordinate} coordinate Coordinate.
@param {number} resolution Resolution.
@param {import("../proj.js").ProjectionLike} projection Projection.
@param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should
    be provided. If `QUERY_LAYERS` is not provided then the layers specified
    in the `LAYERS` parameter will be used. `VERSION` should not be
    specified here.
@return {string|undefined} GetFeatureInfo URL.
@api