function Tile(_ref) {
    var coords = _ref.coords,
      style_z = _ref.style_z,
      source = _ref.source,
      workers = _ref.workers,
      view = _ref.view;
    _classCallCheck(this, Tile);
    this.id = id++;
    this.view = view;
    this.source = source;
    this.generation = null;
    this.valid = true;
    this.visible = false;
    this.proxy_for = null;
    this.proxied_as = null;
    this.proxy_level = 0;
    this.proxy_order_offset = 0;
    this.fade_in = true;
    this.loading = false;
    this.loaded = false;
    this.built = false;
    this.labeled = false;
    this.error = null;
    this.debug = {};
    this.style_z = style_z; // zoom level to be used for styling
    this.coords = TileID.normalizedCoord(coords, this.source);
    this.key = TileID.key(this.coords, this.source, this.style_z);
    this.overzoom = Math.max(this.style_z - this.coords.z, 0); // number of levels of overzooming
    this.overzoom2 = Math.pow(2, this.overzoom);
    this.min = Geo$1.metersForTile(this.coords);
    this.max = Geo$1.metersForTile({
      x: this.coords.x + 1,
      y: this.coords.y + 1,
      z: this.coords.z
    }), this.span = {
      x: this.max.x - this.min.x,
      y: -(this.max.y - this.min.y)
    };
    this.bounds = {
      sw: {
        x: this.min.x,
        y: this.max.y
      },
      ne: {
        x: this.max.x,
        y: this.min.y
      }
    };
    this.meters_per_pixel = Geo$1.metersPerPixel(this.style_z);
    this.meters_per_pixel_sq = this.meters_per_pixel * this.meters_per_pixel;
    this.units_per_pixel = Geo$1.units_per_pixel / this.overzoom2; // adjusted for overzoom
    this.units_per_meter_overzoom = Geo$1.unitsPerMeter(this.coords.z) * this.overzoom2; // adjusted for overzoom
    this.preserve_tiles_within_zoom = this.source.preserve_tiles_within_zoom; // source-specific tile retention policy

    this.meshes = {}; // renderable VBO meshes keyed by style
    this.new_mesh_styles = []; // meshes that have been built so far in current build generation
    this.pending_label_meshes = null; // meshes that are pending collision (shouldn't be displayed yet)

    this.setWorker(workers);
  }
Tile
      @constructor
      Required properties:
      coords: object with {x, y, z} properties identifying tile coordinate location
      worker: web worker to handle tile construction