code: @Override
  	public TileDao getTileDao(TileMatrixSet tileMatrixSet) {
  
  		if (tileMatrixSet == null) {
  			throw new GeoPackageException("Non null "
  					+ TileMatrixSet.class.getSimpleName()
  					+ " is required to create " + TileDao.class.getSimpleName());
  		}
  
  		// Get the Tile Matrix collection, order by zoom level ascending & pixel
  		// size descending per requirement 51
  		List<TileMatrix> tileMatrices;
  		try {
  			TileMatrixDao tileMatrixDao = getTileMatrixDao();
  			QueryBuilder<TileMatrix, TileMatrixKey> qb = tileMatrixDao
  					.queryBuilder();
  			qb.where().eq(TileMatrix.COLUMN_TABLE_NAME,
  					tileMatrixSet.getTableName());
  			qb.orderBy(TileMatrix.COLUMN_ZOOM_LEVEL, true);
  			qb.orderBy(TileMatrix.COLUMN_PIXEL_X_SIZE, false);
  			qb.orderBy(TileMatrix.COLUMN_PIXEL_Y_SIZE, false);
  			PreparedQuery<TileMatrix> query = qb.prepare();
  			tileMatrices = tileMatrixDao.query(query);
  		} catch (SQLException e) {
  			throw new GeoPackageException("Failed to retrieve "
  					+ TileDao.class.getSimpleName() + " for table name: "
  					+ tileMatrixSet.getTableName() + ". Exception retrieving "
  					+ TileMatrix.class.getSimpleName() + " collection.", e);
  		}
  
  		// Read the existing table and create the dao
  		TileTableReader tableReader = new TileTableReader(
  				tileMatrixSet.getTableName());
  		TileConnection userDb = new TileConnection(database);
  		final TileTable tileTable = tableReader.readTable(userDb);
  		tileTable.setContents(tileMatrixSet.getContents());
  		TileDao dao = new TileDao(getName(), database, userDb, tileMatrixSet,
  				tileMatrices, tileTable);
  
  		return dao;
  	}
docs: {@inheritDoc}