constructor({ coords, style_z, source, workers, view }) {
        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.metersForTile(this.coords);
        this.max = Geo.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.metersPerPixel(this.style_z);
        this.meters_per_pixel_sq = this.meters_per_pixel * this.meters_per_pixel;
        this.units_per_pixel = Geo.units_per_pixel / this.overzoom2; // adjusted for overzoom
        this.units_per_meter_overzoom = Geo.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