docs: function BoundingBox (bounds) {
    var k
  
    if (bounds === null || typeof bounds === 'undefined') {
      this.minlat = -90
      this.minlon = -180
      this.maxlat = +90
      this.maxlon = +180
      return
    }
  
    // Leaflet.latLngBounds detected!
    if (typeof bounds.getSouthWest === 'function') {
      var sw = bounds.getSouthWest().wrap()
      var ne = bounds.getNorthEast().wrap()
  
      bounds = {
        minlat: sw.lat,
        minlon: sw.lng,
        maxlat: ne.lat,
        maxlon: ne.lng
      }
    }
  
    // GeoJSON detected
    if (bounds.type === 'Feature') {
      var b = GeoJSONBounds.extent(bounds)
  
      bounds = {
        minlat: b[1],
        minlon: b[0],
        maxlat: b[3],
        maxlon: b[2]
      }
    }
  
    if ('bounds' in bounds) {
      bounds = bounds.bounds
    }
  
    if (bounds.lat) {
      this.minlat = bounds.lat
      this.maxlat = bounds.lat
    }
  
    if (bounds.lon) {
      this.minlon = bounds.lon
      this.maxlon = bounds.lon
    }
  
    if (Array.isArray(bounds)) {
      this.minlat = bounds[0]
      this.maxlat = bounds[0]
      this.minlon = bounds[1]
      this.maxlon = bounds[1]
    }
  
    // e.g. L.latLng object
    if (bounds.lng) {
      this.minlon = bounds.lng
      this.maxlon = bounds.lng
    }
  
    var props = ['minlon', 'minlat', 'maxlon', 'maxlat']
    for (var i = 0; i < props.length; i++) {
      k = props[i]
      if (k in bounds) {
        this[k] = bounds[k]
      }
    }
  
    this._wrap()
  }