code: function FlatGeometry(levelPropertiesList) {
    if (type(levelPropertiesList) !== 'array') {
      throw new Error('Level list must be an array');
    }
  
    this.levelList = makeLevelList(levelPropertiesList, FlatLevel);
    this.selectableLevelList = makeSelectableLevelList(this.levelList);
  
    for (var i = 1; i < this.levelList.length; i++) {
      this.levelList[i]._validateWithParentLevel(this.levelList[i-1]);
    }
  
    this._tileSearcher = new TileSearcher(this);
  
    this._neighborsCache = new LruMap(neighborsCacheSize);
  
    this._vec = vec4.create();
  
    this._viewSize = {};
  }
docs: @class FlatGeometry
  @implements Geometry
  @classdesc
  
  A {@link Geometry} implementation suitable for tiled flat images with
  multiple resolution levels.
  
  The following restrictions apply:
  - All tiles must be square, except when in the last row or column position,
  and must form a rectangular grid;
  - The width and height of a level must be multiples of the parent level
  width and height.
  
  @param {Object[]} levelPropertiesList Level description
  @param {number} levelPropertiesList[].width Level width in pixels
  @param {number} levelPropertiesList[].tileWidth Tile width in pixels for
  square tiles
  @param {number} levelPropertiesList[].height Level height in pixels
  @param {number} levelPropertiesList[].tileHeight Tile height in pixels for
  square tiles