    import * as L from '@mapgis/leaflet'
    // @link https://github.com/Raruto/leaflet-rotate
    /**
     * L.GridLayer
     */
    const gridLayerProto = L.extend({}, L.GridLayer.prototype)

    L.GridLayer.include({
      getEvents() {
        const events = gridLayerProto.getEvents.call(this)
        if (this._map._rotate && !this.options.updateWhenIdle) {
          if (!this._onRotate) {
            this._onRotate = L.Util.throttle(
              this._onMoveEnd,
              this.options.updateInterval,
              this
            )
          }
          events.rotate = this._onRotate
        }
        return events
      },

      _getTiledPixelBounds(center) {
        if (!this._map._rotate) {
          return gridLayerProto._getTiledPixelBounds.call(this, center)
        }

        const map = this._map
        const mapZoom = map._animatingZoom
          ? Math.max(map._animateToZoom, map.getZoom())
          : map.getZoom()
        const scale = map.getZoomScale(mapZoom, this._tileZoom)
        const pixelCenter = map.project(center, this._tileZoom).floor()
        const size = map.getSize()
        const halfSize = new L.Bounds([
          map.containerPointToLayerPoint([0, 0]).floor(),
          map.containerPointToLayerPoint([size.x, 0]).floor(),
          map.containerPointToLayerPoint([0, size.y]).floor(),
          map.containerPointToLayerPoint([size.x, size.y]).floor()
        ])
          .getSize()
          .divideBy(scale * 2)

        return new L.Bounds(
          pixelCenter.subtract(halfSize),
          pixelCenter.add(halfSize)
        )
      }
    })