/*
 * @Author: hisense.wuhongjian
 * @Date: 2022-07-25 17:13:49
 * @LastEditors: hisense.wuhongjian
 * @LastEditTime: 2022-07-26 10:23:40
 * @Description: 告诉大家这是什么
 */
;(L.TileLayer.WMTS = L.TileLayer.extend({
  defaultWmtsParams: {
    service: 'WMTS',
    request: 'GetTile',
    version: '1.0.0',
    layer: '',
    style: '',
    tilematrixset: '',
    format: 'image/jpeg',
  },
  initialize: function (a, b) {
    this._url = a
    var c = {},
      d = Object.keys(b)
    d.forEach((a) => {
      c[a.toLowerCase()] = b[a]
    })
    var e = L.extend({}, this.defaultWmtsParams),
      f = c.tileSize || this.options.tileSize
    for (var g in ((e.width =
      c.detectRetina && L.Browser.retina ? (e.height = 2 * f) : (e.height = f)),
    c))
      e.hasOwnProperty(g) && 'matrixIds' != g && (e[g] = c[g])
    ;(this.wmtsParams = e),
      (this.matrixIds = b.matrixIds || this.getDefaultMatrix()),
      L.setOptions(this, b)
  },
  onAdd: function (a) {
    ;(this._crs = this.options.crs || a.options.crs),
      L.TileLayer.prototype.onAdd.call(this, a)
  },
  getTileUrl: function (a) {
    var b = this.options.tileSize,
      c = a.multiplyBy(b)
    ;(c.x += 1), (c.y -= 1)
    var d = c.add(new L.Point(b, b)),
      e = this._tileZoom,
      f = this._crs.project(this._map.unproject(c, e)),
      g = this._crs.project(this._map.unproject(d, e))
    tilewidth = g.x - f.x
    var h = this.matrixIds[e].identifier,
      i = h,
      j = this.matrixIds[e].topLeftCorner.lng,
      k = this.matrixIds[e].topLeftCorner.lat,
      l = Math.floor((f.x - j) / tilewidth),
      m = -Math.floor((f.y - k) / tilewidth),
      n = L.Util.template(this._url, { s: this._getSubdomain(a) })
    return (
      n +
      L.Util.getParamString(this.wmtsParams, n) +
      '&tilematrix=' +
      i +
      '&tilerow=' +
      m +
      '&tilecol=' +
      l
    )
  },
  setParams: function (a, b) {
    return L.extend(this.wmtsParams, a), b || this.redraw(), this
  },
  getDefaultMatrix: function () {
    for (var a = Array(22), b = 0; 22 > b; b++)
      a[b] = {
        identifier: '' + b,
        topLeftCorner: new L.LatLng(20037508.3428, -20037508.3428),
      }
    return a
  },
})),
  (L.tileLayer.wmts = function (a, b) {
    return new L.TileLayer.WMTS(a, b)
  })