class LonLatMultiLevelSource extends GenericMultiLevelSource {

    public static MultiLevelSource create(MultiLevelSource lonSource, MultiLevelSource latSource,
                                          LonLatFunction function, int targetDataType) {
        Assert.argument(lonSource != null, "lonSource != null");
        Assert.argument(latSource != null, "latSource != null");
        Assert.argument(function != null, "function != null");
        Rectangle2D lonModelBounds = lonSource.getModel().getModelBounds();
        Rectangle2D latModelBounds = latSource.getModel().getModelBounds();
        Assert.argument(Objects.equals(lonModelBounds, latModelBounds), "Model bounds of lat and lon source must be equal");
        return new LonLatMultiLevelSource(lonSource, latSource, function, targetDataType);
    }

    private  LonLatMultiLevelSource(MultiLevelSource lonSource, MultiLevelSource latSource, LonLatFunction function,
                                   int targetDataType);

}